Я использую Windows 7 64 бит с MSVC2005 и QT (но я сомневаюсь, что QT вызывает проблему, поскольку это проблема с основным типом данных 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-битный процессор ... хотя предполагается, что символы должны обрабатываться как 1 байт. Вероятно, они хранятся как 4 байта. Так что
char A=0xAA;
if(A==0xFFFFFFAA)
printf("Success");
else
printf("Fail");
Теперь я получаю успех !!!
Но WTF!Является ли это стандартным поведением !! Если проклятая вещь определена как символ, разве компилятор не должен знать, что с ним делать? Дальнейшие тесты показывают, что дополнительные байты сохраняются как единичные, если наиболее значимый бит символа является1. Таким образом, 0x07 и ниже сохраняются как 0x00000007. WTF.
На самом деле я, кажется, ответил на все мои вопросы ... кроме того, кому звонить, чтобы исправить эту ошибку. Это даже ошибка? Вы можете использоватьMSVC2005 на 64-битных операционных системах правильноили я идиот.Я думаю, я должен заставить Qt Creator использовать MSVC2010 ... черт побери.Там идут мои 2 часа.