c语言中 unsigned int i=3;printf("%u\n",i*-1);

在32位编译系统中,运行以下程序的结果是()
#include <stdio.h>
main()
{
unsigned int i=3;
printf("%u\n",i*-1);
return 0;
}
A.3 B.-3 C.4294967293 D.运行出错
===运行程序的结果选C答案,求大侠详细解释

刚开始-1被识别为int类型,但是unsigned * int,int类型会被隐式转化为unsigned类型,-1的位级表示是0xFFFFFFFF,于是这里两个unsinged类型的相乘。0xFFFFFFFF * 0x3 = 0x2FFFFFFFD,由于是取其商,商为32位,因此对于乘得的结果进行阶段,留下32位,即0xFFFFFFFD,由于是%u,解释为unsigned类型,十进制显示为4294967293。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-12-03
先把-3转为十六进制数的补码,取反加1->0xFFFFFFFD,转为unsigned型之后依然是0xFFFFFFFD,由于正数的原码和补码一样,所以转换之后的数就是0xFFFFFFFD,化为十进制就是4294967293
第2个回答  2015-12-03
3*-1 = -3(整数)
C选项的数+3用unsigned表示为0!
这是unsigned的边界-3!