Почему 0x00000100 = 256?
не должно 0x00000100 = 4.
Я понимаю, что 0x00000001 = 1 с 2^0 и 0x00000010 = 2 с 2^1. Что не так с моим мышлением?
initVariable(&variable1, "variable1", "1, 2, 3", 0x00000100);
assertIntegerEquals(variable1.address, 4); // 0x00000100 = 4?
мое утверждение терпит неудачу, потому что оно говорит, что 256 != 4
6 ответов
номера, которые начинаются с 0x
интерпретируются как шестнадцатеричные (база 16) В C.
так 0x10 == 16
и 0x100 == 256
, 0x10000 == 65536
, etc.
полномочия два:
- 20 = 0х1
- 21 = 0x2
- 22 = признаки 0x4
- 23 = 0x8
- 24 = 0x10
- 25 = 0х20
- 26 = на 0x40
- 27 = 0х80
нет,0x
означает шестнадцатеричный (т. е. базовый-16), а не двоичный, с которым вы, похоже, путаете его.
Если вы хотите использовать двоичные литералы в коде, то см. это так вопрос, в котором упоминается расширение gcc, которое позволяет 0b00000100
для представления 4
в двоичном.
0x00000100
есть в базе-16, потому что 0x
префикс означает, что вы, используя шестнадцатеричную нотацию.
так 0x00000001
= 1*160 = 1, 0x00000010
= 1*161, 0x00000100
= 1*162 = 256 и 0x00000123
= 1*162 + 2*161 + 3*160 = 256 + 32 + 3 = 291
чтобы играть с нотацией base-2, base-10 и base-16, вы можете попробовать этот сайт: http://www.mathsisfun.com/binary-decimal-hexadecimal-converter.html
0x
префикс шестнадцатеричных 0x00000100 = 256 base 16
00000100 = 00000120100
= 1 * 162 + 0*161 + 0*0
=1 * 256 + 0*16 + 0*1
= 256 + 0 + 0
=256