long int FinalValue;
char a,b,c,d;
a=0x1;
b=0x2;
c=0x3;
d=0x4;
FinalValue |= (long)a;
FinalValue <<= 0x8;
FinalValue |= (long)b;
FinalValue <<= 0x8;
FinalValue |= (long)c;
FinalValue <<= 0x8;
FinalValue |= (long)d;
Printf("%d, %d, %d, %d", a,b,c,d);
Printf("FinalValue = %ld"FinalValue);
Выход получен: 1 2 3 4 FinalValue = 0x05020304
Ожидаемый результат: 1 2 3 4 FinalValue = 0x01020304
Когда приведенный выше код выполняется с разными входами (для a, b, c, d), выходной результат, полученный в MSB с конечным значением, составляет: 0x (a | d) bcd (в вышеприведенном примере 0x1 или с 0x4 для получения 0x5)
Почему байт MSB получает ORed с байтом LSB?