У меня есть этот пример кода:C++ сдвига вправо, проблемы XOR
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#include "math.h"
#ifndef uint32
#define uint32 unsigned long int
#endif
#define L(a) printf("\n%x >> 1 = %x", a, a>>1)
int _tmain(int argc, _TCHAR* argv[])
{
uint32 a = 2941362065;
uint32 b = 509727776;
uint32 c = a^b;
L(a^b);
printf("\n%x >> 1 = %x", c , c>>1);
return 0;
}
Моя проблема заключается в том, что L (а) возвращает
b1304bb1 >> 1 = a0617581
в то время как
printf("\n%x >> 1 = %x", c , c>>1);
возвращается
b1304bb1 >> 1 = 589825d8
Последнее значение - это то, которое кажется правильным, поскольку калькулятор окон возвращает его. Этот код работает на WinXP 32. Есть идеи?
Ну, это то, что вы получаете за использование макросов, вы этого заслуживаете. Дело в том, что 'L (a^b)' становится 'a^b >> 1', который затем оценивается как' a^(b >> 1) '. –