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字节与LSB字节进行“或”运算?
答案 0 :(得分:5)
首先将FinalValue
初始化为0
,未初始化的本地(自动)变量包含垃圾。
将Printf("FinalValue = %ld"FinalValue);
更改为printf("FinalValue = %ld", FinalValue);
,添加逗号。
什么是Printf
?你可能意味着printf
。
您想要以十六进制输出吗?使用%lx
。 printf("FinalValue = %lx", FinalValue);
让FinalValue
无符号然后转移。有符号数的有符号位的移位取决于实现。
更新:添加第5点