为什么0x00000100 = 256?

时间:2013-11-20 17:27:26

标签: 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?

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

6 个答案:

答案 0 :(得分:26)

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

所以0x10 == 160x100 == 2560x10000 == 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

答案 1 :(得分:10)

不,0x表示十六进制(即base-16)而不是二进制,这就是你似乎对它的混淆。

如果您想在代码中使用二进制文字,请参阅this SO question,其中提到了允许0b00000100用二进制代表4的gcc扩展名。

答案 2 :(得分:5)

0x前缀表示hexadecimal

答案 3 :(得分:5)

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 < / sup> = 256 + 32 + 3 = 291

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

答案 4 :(得分:3)

0x00000100(十六进制)= 0000 0000 0000 0000 0000 0001 0000 0000(二进制)= 256(十进制)

答案 5 :(得分:0)

0x前缀是十六进制0x00000100 = 256 base 16

00000100 = 000001 2 0 1 0 0

= 1 * 16 2 + 0 * 16 1 + 0 * 0

= 1 * 256 + 0 * 16 + 0 * 1

= 256 + 0 + 0

= 256