在使用2的补码整数的C语言实现中,如果一个有符号整数是负数,则最高位为
在上面的例子中,
1
,否则为0
。对于char
和unsigned char
,signed char
的范围是-128
到127
,而unsigned char
的范围是0
到255
,但实际上它们的十六进制范围是0x00
到0xff
。现在我的问题是,如果在内存中使用8位二进制数存储char
和unsigned char
,计算机本身如何知道它是signed
还是unsigned
?char a = 0xff; printf("%d", a); //its result is -1.
unsigned char a = 0xff; printf("%d", a); //its result is 255.
在上面的例子中,
printf
如何知道 0xff
的值是有符号还是无符号的?这只取决于 a
的定义吗?
0xff
、0377
和255
。 - Brave Sir Robin