C++/MSVC2005/Windows 7 64位中的char行为

ump*_*mps 0 visual-studio-2005 windows-7

我使用Windows 7 64位与MSVC2005和QT(但我怀疑QT导致问题,因为这是基本数据类型char的问题.

所以,当我尝试比较两个char时,就像这样

char A=0xAA;

if(A==0xAA)
 printf("Success");
else
 printf("Fail");
Run Code Online (Sandbox Code Playgroud)

瞧,它失败了!但是当我这样做的时候

char A=0xAA;
char B=0xAA;

if(A==B)
 printf("Success");
else
 printf("Fail");
Run Code Online (Sandbox Code Playgroud)

我成功了!实际上当我想到它...嘿我正在使用64位处理器..即使char应该被视为1个字节.它可能存储为4个字节.所以

char A=0xAA;

if(A==0xFFFFFFAA)
 printf("Success");
else
 printf("Fail");
Run Code Online (Sandbox Code Playgroud)

现在我成功了!!!

但是WTF!这是标准行为!! 如果该死的东西被定义为char,那么编译器不应该知道如何处理它吗?进一步的测试显示,如果char的最高有效位为1,则额外字节仅存储为1.因此0x07和更低的存储为0x00000007.WTF.

实际上我似乎已经回答了我的所有问题...除了谁打电话来修复这个错误.这甚至是一个错误吗?您可以在64位操作系统上使用MSVC2005,或者我是一个白痴.我想我应该让qt创建者使用MSVC2010 ..该死的.我花了2个小时.

Mar*_*tos 6

您正在将(签名)char与值-86(256-0xAA)比较为值为170(0xAA)的整数.

对于这个问题,在32位系统和8位系统上也会发生同样的情况.