unsigned long val;
char a=0x96;
char b=0x81;
char a=0x96;
char b=0x81;
val= b<<8 | a;
问val=___?
0x8196或0xffffff96。
取决于编译器把char默认为无符号还是有符号。
字节作移位或算术一般定义为unsigned char,
先做整型提升到int,有符号的话,
做符号位扩展,而两个值bit7 == 1
变成
(0xffffff81 << 8) | 0xffffff96 == 0xffff8100 | 0xffffff96 == 0xffffff96
然后转成unsigned long
以上是主观理解,如果想验证,可以看让编译器生成汇编输出。
VC6->Project->Settings->C/C++->listing files,Listing file type选除了No listing外的任何一个。
gcc 增加 -S 开关