Значение C неожиданно определяет изменения

У меня есть много из #defineв моем коде. Теперь странная проблема накопилась.

У меня есть это:

#define _ImmSign    010100

(Я пытаюсь моделировать двоичное число),

Очевидно, я ожидаю, что число станет 10100. Но когда я использую число, оно изменилось в 4 160.

Что происходит здесь? И как я останавливаю его?

ДОПОЛНИТЕЛЬНЫЙ

Хорошо, таким образом, это происходит из-за языка, интерпретирующего это как восьмеричное. Там некоторый умный путь состоит в том, чтобы однако вынудить язык интерпретировать числа как целые числа? Если продвижение 0 определяет восьмеричный, и 0x определяет шестнадцатеричный теперь, когда я думаю о нем...

6
задан Brian Tompsett - 汤莱恩 27 November 2015 в 15:41
поделиться

7 ответов

Если вы хотите писать непереносимый код и использовать gcc, вы можете использовать расширение двоичных констант :

#define _ImmSign    0b010100
1
ответ дан 8 December 2019 в 04:51
поделиться

Целочисленные литералы, начинающиеся с 0 , интерпретируются как восьмеричные, а не десятичные, так же, как целочисленные литералы, начинающиеся с 0x интерпретируются как шестнадцатеричные.

Удалите начальный ноль, и все будет в порядке.

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

13
ответ дан 8 December 2019 в 04:51
поделиться

Приставка 0 к целому числу делает его восьмеричным числом, а не десятичным, а 010100 в восьмеричной системе счисления равно 4160 в десятичной.

4
ответ дан 8 December 2019 в 04:51
поделиться

010100 рассматривается как восьмеричное по C из-за ведущего 0. Восьмеричное число 10100 равно 4160.

2
ответ дан 8 December 2019 в 04:51
поделиться

В C нет синтаксиса двоичных чисел, по крайней мере, без какого-либо расширения компилятора. Вы видите, что 010100 интерпретируется как восьмеричное (с основанием 8) число: это делается, когда числовой литерал начинается с 0.

2
ответ дан 8 December 2019 в 04:51
поделиться

Посмотрите здесь есть несколько макросов для использования двоичных чисел в C http://www.velocityreviews.com/forums/t318127-using-binary-numbers-in-c.html

Есть еще один поток, в котором также есть это. Могу ли я использовать двоичный литерал в C или C++?

2
ответ дан 8 December 2019 в 04:51
поделиться

Octal :-)

Вы можете найти эти макросы полезными для представления двоичных чисел десятичными или восьмеричными числами в виде 1 и 0. Они обрабатывают ведущие нули, но, к сожалению, вам придется выбирать правильное имя макроса в зависимости от того, есть ли у вас ведущий нуль или нет. Не идеально, но, надеюсь, полезно.

0
ответ дан 8 December 2019 в 04:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: