我只是想知道为什么这里 n = 0 ?
char c = 0xff;
int n = c+1;
cout << n << endl;
system("pause");
1) c = 0xff
2) 0xff + 1 = 0x100。
你能解释一下吗?
我只是想知道为什么这里 n = 0 ?
char c = 0xff;
int n = c+1;
cout << n << endl;
system("pause");
1) c = 0xff
2) 0xff + 1 = 0x100。
你能解释一下吗?
假设一个无符号char类型,0xff将给出十进制值 255。加一,你得到 256,0x100或 256。这将被打印出来,就100好像你已经操纵std::cout以十六进制打印一样std::cout << std::hex;
假设8 位有符号char,0xff会溢出,给出 -1。加1,你会得到0。
您的平台显然使用签名 char类型。当你用 初始化它时0xFF,它会溢出并导致实现定义的行为。你c最终等于-1。当你添加1到时-1,你会得到0。这里没有什么不寻常的。
声明你的cas unsigned char,结果n值将是0x100,这可能是你所期望的。