2016-01-09 8 views

ответ

5

Целочисленный литерал с ведущим 0 - это восьмеричное число. Таким образом, 064 является не64 (основание 10). 064 является 52 в десятичной форме. Следовательно, он устанавливает разные биты в то, что устанавливает 64.

8
line_c |= 064; /* wrongly sets bits 2,4 and 5 */ 

-> 064 (ведущий ноль) означает, что восьмеричное 64 (основание 8), которая является 0011 0100 двоичной.

line_c |= 64; /* rightly sets bit 6 */ 

-> 64 десятичных (основание 10), преобразует в 0100 0000 двоичной системы.

+0

Это должен быть принятый ответ. –

1

В C есть десятичные, восьмеричные и шестнадцатеричные литералы.

шестнадцатеричных из них легко узнаваем, потому что они начинают с 0x, как 0xff для десятичного числа 255.

восьмеричных из них являются те, которые начинаются с цифрой 0, возможно, с последующим дополнительными цифрами 0..7 , Следовательно, буквальная константа 0 на самом деле синтаксически является восьмеричной константой. Вот почему правило 7.1 MISRA формулируется следующим образом: «Октальные константы (отличные от нуля) и восьмеричные escape-последовательности не должны использоваться». Поскольку 0 является восьмеричной константой, они явно должны разрешить ее использование :-)

Десятичные константы, наконец, это те, которые начинаются с цифры 1..9, а затем, возможно, следующих цифр 0..9. Вот почему 064 отличается от 64.