C语言的一道题,求解释

运行结果是4294967293,为什么是这个... 运行结果是4294967293,为什么是这个 展开
 我来答
My_Persistence
2016-11-21 · TA获得超过3467个赞
知道大有可为答主
回答量:1201
采纳率:81%
帮助的人:432万
展开全部
输出的结果是:4294967293
分析如下:
变量i是有符号数,i=-3,而负数在内存中是以其补码的形式存放的,-3的补码(int型的占4个字节32位):1,111 1111 1111 1111 1111 1111 1111 1101,其中最高位是符号位(0为正,1为负),而变量ud是无符号位的,那么就不存在符号位了,当将变量i赋值给ud时,这里存在一个自动类型转换,这是编译系统自动进行的,会先将变量i转换为无符号数,即符号位不起作用了,而是把它当作数值位了,然后赋值给ud。那么,输出ud的十进制值就是将上面的二进制计算出来就可以了,其实就是十进制的4294967293。
%u是以十进制输出无符号的int类型格式符。
蛋蛋的苍穹之下
2016-11-21 · TA获得超过159个赞
知道小有建树答主
回答量:220
采纳率:0%
帮助的人:129万
展开全部
假设int为32位,-3 对应的是 0xfffffffd, 对应的unsigned int 就是4294967293
关于-3 = 0xfffffffd,可以去查看补码
https://zh.wikipedia.org/zh/%E4%BA%8C%E8%A3%9C%E6%95%B8
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
钟陈眷属1314
2016-11-21 · TA获得超过734个赞
知道小有建树答主
回答量:2684
采纳率:64%
帮助的人:297万
展开全部
这结果明显就是乱码了啊,你好好了解一下这两种数据类型吧,不是同一种类型好吗
追问
涉不涉及到反码补码之类的
追答
你如果要深入学习,你必须得了解这些类型的概念,否者就算告诉你了,你也很难继续学习的,授之于渔了,已经告诉你怎么做了啊。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式