Поведение восьмеричных чисел в С++

В C++, если мы вводим число через консоль (cin) и начинаем число с нуля, оно сохраняет восьмеричное основание. Но может ли одна переменная содержать более двух значений?

Например, ввод следующих значений:


    03 => 3 (Octal)
    012 => 10 

Но когда мы входим


    0180
    It give answer in 2 lines when output the variable (cout):
    1
    80

    and 01188 gives
    9
    88

Теперь я знаю, что восьмеричная база имеет значения от 0 до 7. Так что же здесь происходит? Одна переменная хранит более двух значений или компилятор просто сходит с ума, потому что мы вводим 8?

Я использую турбо C 7 от компилятора Akki.


person Paras    schedule 30.11.2015    source источник
comment
Он читает столько восьмеричного, сколько может.   -  person erip    schedule 30.11.2015
comment
Слон в комнате: Почему вы используете компилятор C 25-летней давности? История компьютерного курса?   -  person user4581301    schedule 30.11.2015


Ответы (1)


0180 — это восьмеричная единица, за которой следует десятичная восьмерка. 01188 — это восьмеричная девятка, за которой следует десятичная восемьдесят восемь. Любой символ, который не является допустимым восьмеричным, отмечает конец восьмеричного числа. Любой символ, не являющийся допустимым десятичным числом, обозначает конец десятичного числа.

В дальнейшем кажется, что вы плохо понимаете разницу между числами и представлениями чисел. Подумайте, сколько пальцев у вас (скорее всего) есть. Это число можно представить как «десять», «10», «количество ваших пальцев» и многими другими способами. Но это все равно одно и то же число, независимо от того, как вы его представляете.

Десятичный и восьмеричный — это способы представления неограниченного количества числовых значений с ограниченным количеством различных символов. Чтобы представить число в исходном коде или в качестве ввода или вывода в компьютерную программу, необходимо использовать некоторое представление.

Понимание разницы между числами и представлениями чисел имеет решающее значение для того, чтобы быть опытным программистом, и иметь достаточно математических знаний, чтобы делать это с комфортом.

person David Schwartz    schedule 30.11.2015
comment
Спасибо, Давид, за мудрый ответ. Я хочу кое-что спросить здесь. Вы сказали, что 01188 - это восьмеричное число 9. Но восьмеричное число только от 0 до 7, так как же 9? - person Paras; 30.11.2015
comment
Вы путаете цифры (такие символы, как «0» и «7») с числами (например, сколько у вас пальцев). Десятичная и восьмеричная системы для представления числовых значений с помощью символов. Любое целое число может быть представлено в десятичном виде как строка цифр от «0» до «9», а любое целое число может быть представлено в восьмеричном виде как строка цифр от «0» до «7». Посмотреть обновление. - person David Schwartz; 30.11.2015
comment
Я должен был сказать, что 01188 — это восьмеричная девятка, чтобы избежать путаницы. Обновлено. - person David Schwartz; 30.11.2015