为什么在这种情况下打印错误?
Why it prints false in this case?
int main() {
char * a = (char*)malloc(1);
*a = 0xff;
std::cout << (*a == 0xff);
return 0;
}
为什么它打印 0 而不是 1?
0xff
是整型常量,类型为int
。要进行比较,必须将 *a
提升为 int
.
char
似乎已在您的平台上签名。所以提升为整数时,会进行符号扩展。
假设 32 位 int
,您正在将 0xffffffff
与 0x000000ff
进行比较。
切换到 unsigned char
将可靠地给出您想要的结果。
十六进制的 0xff 是十进制的 255。
char 关键字表示有符号字符,范围为 -128 到 127(含)
255无法存入char,溢出。无论结果值是什么,它都不是 0xff。
因此,它打印 False。
希望对您有所帮助! :)
int main() {
char * a = (char*)malloc(1);
*a = 0xff;
std::cout << (*a == 0xff);
return 0;
}
为什么它打印 0 而不是 1?
0xff
是整型常量,类型为int
。要进行比较,必须将 *a
提升为 int
.
char
似乎已在您的平台上签名。所以提升为整数时,会进行符号扩展。
假设 32 位 int
,您正在将 0xffffffff
与 0x000000ff
进行比较。
切换到 unsigned char
将可靠地给出您想要的结果。
十六进制的 0xff 是十进制的 255。 char 关键字表示有符号字符,范围为 -128 到 127(含) 255无法存入char,溢出。无论结果值是什么,它都不是 0xff。
因此,它打印 False。
希望对您有所帮助! :)