C语言中:unsigned int a=-2;printf("%u",a);输出结果为多少?

详细解释一下... 详细解释一下 展开
 我来答
White_MouseYBZ
2015-10-03 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6495万
展开全部
在16位int平台下,输出是65534;在32位int平台下,输出是4294967294。以32位int平台为例,题中的unsigned int a=-2;语句在unsigned的修饰下,赋给变量a的是-2补码的无符号值,即4294967294。但后面的printf("%u",a);的输出并不与a是否为有符号数没有关系,输出是否为有符号数由"%u"中的控制符%u决定,这里%u表示将变量a按无符号数输出,所以输出是4294967294。因此,如果将unsigned int a=-2;改为int a=-2;,printf("%u",a);同样输出4294967294。即使是unsigned int a=4294967294;这样定义a,用printf("%d",a);输出就是-2;因为输出是由控制符%d决定的。
百度网友bd199ca
2011-07-26 · TA获得超过522个赞
知道小有建树答主
回答量:279
采纳率:0%
帮助的人:368万
展开全部
应该是4294967295-2+1=4294967294
因为unsigned int a=-2;这句会强制把负数,转换成正数
追问
谢谢!我完全懂了。你说的基本正确,答案也对,但前提是在VC环境下进行,因为VC占四个字节32位,但在BC的情况则不对!而且“unsigned int a=-2;这句会强制把负数,转换成正数”,这个话有点问题,是不是理解成在“unsigned int a=-2"的下,系统会把最高位符号位1当成数据位看待,而不是强制转换为正数呢??
另一位网友也答对了,不过他是答了BC情况下的答案。呵呵
追答
恩,大多数unsigned int和int都是4个字节的
是的,你理解的很到位~
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fnwzk
2011-07-26 · TA获得超过494个赞
知道小有建树答主
回答量:400
采纳率:0%
帮助的人:439万
展开全部
在VC等32位编译系统上-2的补码是11111111111111111111111111111110
若解释为unsigned int则为4294967294
同理unsigned int a=-2;printf("%d",a);虽然定义a是unsigned类型,但printf();函数中解释为int类型,输出结果还是-2。内存中的2进制数据不同的解释方式,有不同的显示结果。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
颓废前进
2019-01-23
知道答主
回答量:3
采纳率:0%
帮助的人:1232
展开全部

输出结果为65534或者4294967294

因为在不同位的操作系统下,数值的表示位数是不一样的。首先我们先明确一点:在计算机中,正数用原码来计算(正数的原码、补码、反码都是一样的);负数是用补码来计算的。至于原因可以参考一下文章网页链接就是把减法简化为加法从而大大简化计算机电路的过程。

首先在16位系统中,-2的原码为1000 0000 0000 0010;补码为:1111 1111 1111 1110;我们使用的unsigned为无符号数,那么此时计算机会把我们的-2强制转化为正数进行运算,即用1111 1111 1111 1110表示-2,即为65534.

在32位操作系统中,-2的原码为:1000 0000 0000 0000 0000 0000 0000 0010;补码为:1111 1111 1111 1111 1111 1111 1111 1110;同上述,计算机会强制输出1111 1111 1111 1111 1111 1111 1111 1110所代表的十进制数,即4294967294。

可以参考一下例子:

#include <stdio.h>
#include<windows.h>
void main()
{
   unsigned int a=65535;
   int b=4294967294;
   printf("%d %u\n",a,a);
   printf("%d %u\n",b,b);
 system("pause");
}

输出结果:

65535   65535
-2   4294967294

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
康哥小窝窝
2011-07-26 · TA获得超过163个赞
知道小有建树答主
回答量:161
采纳率:0%
帮助的人:47.2万
展开全部
unsigned int 为 0--65535
1111 1111 1111 1111 为 65535
-2用补码表示
1000 0000 0000 0010 取反加1
1111 1111 1111 1110
结果为 65534
追问
谢谢!我完全懂了。你说的基本正确,答案也对,但前提是在BC环境下进行,因为BC占两个字节16位,但在VC的情况则不对!而
另一位网友也答对了,不过他是答了VC情况下的答案。呵呵
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式