我只是想知道为什么这里 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
。这里没有什么不寻常的。
声明你的c
as unsigned char
,结果n
值将是0x100
,这可能是你所期望的。