int main() {
char * a = (char*)malloc(1);
*a = 0xff;
std::cout << (*a == 0xff);
return 0;
}
为什么打印0而不是1?
答案 0 :(得分:6)
0xff
是一个整数常量,其类型为int
。要进行比较,*a
必须升级为int
。
似乎char
已在您的平台上签名。因此,当推广到整数时,将会有符号扩展。
假设32位int
,您将0xffffffff
与0x000000ff
进行比较。
切换到unsigned char
会得到您想要的结果。
答案 1 :(得分:0)
Hex中的0xff是十进制的255。 char关键字表示带符号的字符,其范围为-128到127(含) 255不能存储在char中并且溢出。无论得到什么值,它都不是0xff。
因此,它打印为假。
希望有用! :)