【发布时间】:2013-07-24 13:19:40
【问题描述】:
char byte = 0x80
if(byte == 0x80)
{
cout << "This message never gets printed!";
}
十六进制值0x80在二进制中等效于1000 0000,显然适合一个字节。
但是,编译器会警告我带有条件的行:
warning: comparison is always false due to limited range of data type
为什么在这种情况下条件为假的结果?
0x80 是否在条件中扩展为 0x80000000 之类的东西?
是否可以使用== 运算符来检查char 是否等于0x80?
【问题讨论】:
-
char可以签名也可以不签名。 -
是的。但是即使
0x80解析为负数,我们不只是比较char的内容是否等于字面量吗?如果不是,请解释! :) -
@CoryKlein:
0x80是int。 -
这让我之前。很烦人。
-
更烦人的是,这种比较实际上会在某些架构上返回 true,而在其他架构上返回 false。因此,在为不同的平台编译时,正在运行的代码会突然中断。就我而言,编译器没有像你一样发出警告。
标签: c++ types binary char byte