为什么0x00000100 = 256?

Q L*_*Liu 8 c binary

不应该0x00000100 = 4.

我知道0x00000001 = 1,因为2 ^ 0和0x00000010 = 2,因为2 ^ 1.我的想法有什么问题?

initVariable(&variable1, "variable1", "1, 2, 3", 0x00000100);

assertIntegerEquals(variable1.address, 4); // 0x00000100 = 4?
Run Code Online (Sandbox Code Playgroud)

我的断言失败了,因为它说256!= 4

Die*_*Epp 26

0x以C 开头的数字在C中被解释为十六进制(基数为16).

所以0x10 == 16,和0x100 == 256,0x10000 == 65536等等.

两个人的权力是:

  • 2 0 = 0x1
  • 2 1 = 0x2
  • 2 2 = 0x4
  • 2 3 = 0x8
  • 2 4 = 0x10
  • 2 5 = 0x20
  • 2 6 = 0x40
  • 2 7 = 0x80


tro*_*foe 10

不,0x十六进制(即base-16)而不是二进制,这就是你似乎在混淆它.

如果你想在你的代码中使用二进制文字,那么请看这个SO问题,它提到了允许0b000001004二进制表示的gcc扩展.


Kor*_*idu 7

0x00000100在base-16中,因为0x前缀表示您使用的是十六进制表示法.

所以0x00000001= 1*16 0 = 1,0x00000010= 1*16 1,0x00000100= 1*16 2 = 256和0x00000123= 1*16 2 + 2*16 1 + 3*16 0 = 256 + 32 + 3 = 291

要使用base-2,base-10和base-16表示法,您可以尝试以下网站:http://www.mathsisfun.com/binary-decimal-hexadecimal-converter.html


Bas*_*tch 5

0x前缀是指十六进制