两道c语言题

第一道:#include<stdio.h>voidmain(){unsignedshorta=-1,b=65536;printf("%d,%d\n",a,b);}第二道#... 第一道:
#include <stdio.h>
void main()
{
unsigned short a=-1,b=65536;
printf("%d,%d\n",a,b);
}
第二道
#include <stdio.h>
void main()
{
printf("%5.3f\n",123456.12345);
printf("%5.3f\n",123.12345);
}

求上面两道题的输出结果,还有原因,重点是原因,说明所得结果的原因,谢谢。
展开
 我来答
我是楼楼楼
2015-07-21 · 超过13用户采纳过TA的回答
知道答主
回答量:34
采纳率:0%
帮助的人:18.4万
展开全部
第一道:65535,0
我们首先要求-1的补码:一个负数的补码, 是它对应的正数的补码按位取反并在末位加1.
求-1的补码, 先看正1的补码。
正1的二进制数是0000000000000001, 它的补码是
1111111111111110, 然后末位加1, 就变成了1111111111111111,这正是65535对应的二进制数(PS:unsigned int 型的取值范围是0~65535),因此a输出是65535.
对于b我们知道65536超出了范围,因此装不下的那部分会被截断。
————————————————————————————————————

详细解释:http://blog.163.com/ztlchina@126/blog/static/8259771620094221023014/

第二道:123456.123
123.123
首先我们要知道:%5.3f是控制输出格式的
f表示输出浮点数,
5表示最小输出字符宽度为5位数,
3表示浮点数输出小数点后为3位数

因此答案不难理解了。
有什么不懂得,欢迎追问啊~~~~
追问
第二题不理解,%5.3f不是表示总位数是5位,小数点占3位吗。怎么输出那么多位呢?
弑绯
推荐于2016-01-13 · TA获得超过2500个赞
知道小有建树答主
回答量:893
采纳率:75%
帮助的人:711万
展开全部
第一题:答案是:a=1,b=65535
原因:定义a和b为无符号的short整型,首先无符号,所以a=1,第二,本身short整型的输出范围是-32767到32767,但是因为是无符号的,所以是0到65535,而65536大于它,所以取最大值,65535

第二题:答案是:第一个输出:23456.123,以为输出要求为%5.3f,即整数位5位,小数位3位的浮点数。
第二个输出:空格空格123.123 因为输出要求跟上面一样,所以整数位应该有5位,因为整数位一共只有三位,所以前两位要用空格代替
更多追问追答
追问
第一题结果是:a=65535,b=0.
第二题结果是:123456.123,123.123。
追答
是我把题理解错了,楼下的答案是正确,你去看看吧
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
舞祈罩9
2015-07-21 · 超过41用户采纳过TA的回答
知道小有建树答主
回答量:182
采纳率:0%
帮助的人:84.7万
展开全部
第一题涉及到了几种机器码的转换,建议你看下补码与原码的转换。
第二题就是输出格式控制符了
典型的新手,建议你好好打基础
追问
我有看,但是还存在疑问,麻烦你帮忙 一下,说说为什么,谢谢。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式