81244部队高炮营:C程序救命啊/

来源:百度文库 编辑:中科新闻网 时间:2024/04/29 15:29:14
设整敉42486,如果该整数定义成无符号短整弄数输出时结果是什么?再就是用补码概念解释。
请各位前辈写出详细过程。

当有无符号短整型
unsigned short int a=42486;
则printf("%u",a);的结果依然是42486,因为unsigned short的范围是0--65535;
而printf("%d",a);在16位编译环境下是-23050,在32位编译环境下依然是42486(因为32位下int的范围是-2^32至2^32-1,在范围之内;16位下只有-32768至32767,发生溢出)
下面解释一下为什么在16位下会输出-23050。
42486对应的二进制为1010010111110110,当用%d输出时,因为最高位是1,是个负数,而这个二进制数对应的负数是:对其逐位取反再加1得:0101101000001010,即为23050,加上符号位,最后结果为-23050

输出42486-32768=9718