2015-05-09 3 views
-2

Вопрос новичка: почему я не могу получить printf для вывода двоичного числа, как оно есть, вместо его преобразования?printf как-то конвертирует двоичный код в десятичный

int gpa = 01011001; 
printf("pure: %i \n", gpa); 

дает выход: 266753

Как я могу получить его на выходе 01011001 или просто 1011001?

+2

"* или просто 1011001? *" -> Использовать 'int gpa = 1011001;'. Поскольку целочисленный литерал в 'int gpa = 01011001;' начинается с 0, он считается восьмеричным числом. –

+0

Кажется, что есть два недоразумения: 1) в C вы не можете напрямую инициализировать 'int' с литералом в двоичном формате (base-2) (как уже упоминалось: ведущий' 0' интерпретирует литерал как восьмеричное число). 2) 'int' содержит _number_, он не является двоичным, десятичным, восьмеричным или каким-либо другим. Если вы хотите отобразить такой номер, вам нужно решить, в какой базе должно быть строковое представление: 'printf ("% i ")' отображает число в десятичном формате. –

+0

Тот факт, что вы используете только 1 и 0 в этом значении, не делает его двоичным «в глазах компилятора» (вы действительно ожидали, что компилятор сможет рассказать, какую базу вы используете в соответствии с цифры ???). –

ответ

2

0, предшествующий целочисленному литералу, выполняется для окта-десятичного числа. Десятичный эквивалент 01011001 - 266753. Удалите предыдущее значение 0 для печати.

+0

Я думаю, что OP хочет инициализировать 'gpa' бинарной константой (base-2), и это невозможно непосредственно в C.' 1011001', который будет использоваться как десятичный литерал, конечно. –

+0

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

0

C не поддерживает двоичные константы (хотя отдельные компиляторы могут использоваться как расширение).

Вы можете использовать шестнадцатеричное вместо:

int gpa = 0x59; // 01011001 binary 
printf(" pure: %02x\n", gpa); 

Если вы хотите, чтобы отобразить значение в двоичном формате, вам придется свернуть свою собственную функцию вывода.

Смежные вопросы