为什么在这种情况下打印错误?

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,您正在将 0xffffffff0x000000ff 进行比较。

切换到 unsigned char 将可靠地给出您想要的结果。

十六进制的 0xff 是十进制的 255。 char 关键字表示有符号字符,范围为​​ -128 到 127(含) 255无法存入char,溢出。无论结果值是什么,它都不是 0xff。

因此,它打印 False。

希望对您有所帮助! :)