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

Why it prints false in this case?

本文关键字:错误 打印 这种情况下 为什么      更新时间:2023-10-16
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 不能存储在字符中,它会溢出。无论结果值如何,它都不0xff。

因此,它打印假。

希望对您有所帮助! :)