Member NFOC Ответов: 4

Почему это утверждение int a= 012945; в C++ дает мне ошибку типа "недопустимая восьмеричная цифра" ?


Я использую visual studio 2017,так что это из-за того, что он дает мне ошибку "недопустимая восьмеричная цифра"?

Что я уже пробовал:

если я даю целочисленное значение переменной, которое начинается с 0, то только эта ошибка приходит примерно так int e = 0129612;
но это не дает никакой ошибки, если я просто не использую 0 в первую очередь.

KarstenK

Языковое соглашение C++ гласит, что начало с "0" - это октетное число. Сравните с "0x", который является шестнадцатеричным. :-O

4 Ответов

Рейтинг:
29

Rick York

Восьмеричные цифры могут варьироваться от 0 до 7. Это потому, что восьмеричное-это основание 8. Буквальное целочисленное значение, начинающееся с 0, считается восьмеричным. Если он начинается с 0x, то это шестнадцатеричное значение.


Рейтинг:
2

Jochen Arndt

C/C++ знает три типа целочисленных литералов: восьмеричные, десятичные и шестнадцатеричные.
Начиная с C++14 существует четвертый тип: двоичный.

Литерал, начинающийся с нуля и за которым следует другая цифра, рассматривается как восьмеричное значение (основание 8), которое не может содержать цифры 8 и 9.

Смотреть также целочисленный литерал - cppreference.com[^].


Рейтинг:
0

Patrice T

Цитата:
если я даю целочисленное значение переменной, которое начинается с 0, то только эта ошибка приходит примерно так int e = 0129612;
но это не дает никакой ошибки, если я просто не использую 0 в первую очередь.

Потому что это принцип: целые числа, начинающиеся с 0, являются восьмеричными (основание 8)


Рейтинг:
0

Member NFOC

спасибо всем, кто откликнулся, это очень помогает.