clrc663 源码:无符号整型转换有符号整型(C高手进)

来源:百度文库 编辑:神马品牌网 时间:2024/05/05 19:49:27
main()
{unsigned int a=42486;
printf("a=%d,%o,%x,%u\n",a,a,a,a);}
运行结果:-23050/*①不明白*/,122766,a5f6/*②求出为911214与正确答案不同*/,42486
谢谢指点!!!
第一题明白了.第二思路:10先转2,由2在转16,但是不能直接由10转16吗?结果却为911214与原答案不一致但是10转8结果122766却是对的,我的问题是为什么10转16结果就是911214结果为不正确了?(人工计算)

下面为摘抄:二、十进制转八进制
如:5621转为八进制
8|5621
702 ―― 5 第一位(个位)
87 ―― 6 第二位
10 ―― 7 第三位
1 ―― 2 第四位
最后得八进制数:127658
三、十进制数十六进制
如:76521转为十六进制
16|76521
4726 ――5 第一位(个位)
295 ――6 第二位
18 ――6 第三位
1 ―― 2 第四位
最后得1276516

①这是无符号整形转为有符号整型的溢出问题.
无符整型42486转化为二进制是:1010,0101,1111,0110,因为计算机存储数据是以二进制形式的,当把它做为有符整型输出时,转化方式是这样的:最高位(第十六位)是1时,是负数,其余位减1按位取反,就成:
-101101000001010,再转为十进制,就是:-23050
②此数是十六进制,完全正确,上面列出了它的二进制形式,1010为A,0101为5,1111为F,0110为6.你可以用windows的计算器转化一下.