现在的位置: 首页 > 综合 > 正文

[转] C试题

2012年06月07日 ⁄ 综合 ⁄ 共 380字 ⁄ 字号 评论关闭
unsigned long val;
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 开关

抱歉!评论已关闭.