我正在尝试编写校验和评估程序。我写了下面的代码;
0xFF -
( (
0x10 + 0x01 +0x00+ 0x13+ 0xa2+ 0x00+ 0x40+ 0x4a+
0xfd + 0x15 + 0xff + 0xfe+ 0x00+ 0x08 +
( 1 + 30 ) +
( 2 + 30 )
)
& 0xFF
)
看到行(1 + 30)和(2 + 30),它们被转换为十六进制值,但是在加法时它们被转换,结果不是预期的。有没有办法说(1 + 30)是我的c编译器兄弟的十六进制值?
答案 0 :(得分:2)
如果您希望编译器使用30
作为十六进制小数值,请使用0x
提及它。与(0x1 + 0x30) + (0x2 + 0x30)
int a
- 此处a
可以将+2^31
的值存储到-(2^31-1)
,其范围不是0
到9
。 a
始终以二进制格式存储值。我们可以用十进制,十六进制或八进制等任何格式打印它。 printf("%d, %x, %o", a, a, a);
因此,如果您想在a
的位置使用变量30
。使用如下。
int a = 0x30; //or int a = 48; 48 is the decimal representation of 0x30
....
(0x1 + a)
....
不要混淆十六进制值。它只是一个价值的代表。如果你有一支10笔,你可以这样说
10
笔0xA
笔12
笔