-6

我只是想知道为什么这里 n = 0 ?

char c = 0xff;
    int n = c+1;
    cout << n << endl;
    system("pause");

1) c = 0xff
2) 0xff + 1 = 0x100。

你能解释一下吗?

4

2 回答 2

6

假设一个无符号char类型,0xff将给出十进制值 255。加一,你得到 256,0x100或 256。这将被打印出来,就100好像你已经操纵std::cout以十六进制打印一样std::cout << std::hex;

假设8 位有符号char,0xff会溢出,给出 -1。加1,你会得到0。

于 2013-01-17T18:15:55.843 回答
6

您的平台显然使用签名 char类型。当你用 初始化它时0xFF,它会溢出并导致实现定义的行为。你c最终等于-1。当你添加1到时-1,你会得到0。这里没有什么不寻常的。

声明你的cas unsigned char,结果n值将是0x100,这可能是你所期望的。

于 2013-01-17T18:18:44.613 回答