我正在使用带有MSVC2005和QT的Windows 7 64位(但我怀疑QT是否会导致问题,因为这是基本数据类型char的问题。
所以当我尝试比较两个char时就像这样
char A=0xAA;
if(A==0xAA)
printf("Success");
else
printf("Fail");
瞧,它失败了!但是当我这样做时
char A=0xAA;
char B=0xAA;
if(A==B)
printf("Success");
else
printf("Fail");
我成功了!实际上当我想到它...嘿我正在使用64位处理器..即使char应该被视为1个字节。它可能存储为4个字节。 所以
char A=0xAA;
if(A==0xFFFFFFAA)
printf("Success");
else
printf("Fail");
现在我成功了!
但是WTF!这是标准行为!!如果该死的东西被定义为char,那么编译器不应该知道如何处理它吗?进一步的测试显示,如果char的最高有效位为1,则额外字节仅存储为1。因此0x07和更低的存储为0x00000007。 WTF。
实际上我似乎已回答了我的所有问题......除了要求修复此错误的人。这甚至是一个错误吗?您可以在64位操作系统上使用MSVC2005,或者我是一个白痴。我想我应该让qt创建者使用MSVC2010 ..该死的。我花了2个小时。
答案 0 :(得分:6)
您正在将(签名)char与值-86(256-0xAA)比较为值为170(0xAA)的整数。
对于32位系统和8位系统也是如此。
答案 1 :(得分:2)
与64位无关:您需要将A定义为unsigned char以获得正确的行为。编译器警告显示此代码可能不正确:
警告C4309:'初始化':截断常数值