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

时间:2017-10-29 08:37:43

标签: c++ hex cout

int main() {
    char * a = (char*)malloc(1);
    *a = 0xff;
    std::cout << (*a == 0xff);
    return 0;
}

为什么打印0而不是1?

2 个答案:

答案 0 :(得分:6)

0xff是一个整数常量,其类型为int。要进行比较,*a必须升级为int

似乎char已在您的平台上签名。因此,当推广到整数时,将会有符号扩展。

假设32位int,您将0xffffffff0x000000ff进行比较。

切换到unsigned char会得到您想要的结果。

答案 1 :(得分:0)

Hex中的0xff是十进制的255。 char关键字表示带符号的字符,其范围为-128到127(含) 255不能存储在char中并且溢出。无论得到什么值,它都不是0xff。

因此,它打印为假。

希望有用! :)