不应该是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
答案 0 :(得分:26)
以0x
开头的数字在C中被解释为十六进制(基数为16)。
所以0x10 == 16
,0x100 == 256
,0x10000 == 65536
等
两个人的权力是:
答案 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