一道C语言问题 会的人麻烦解释一下

以下程序段的输出结果是:()intk=32768;printf("%d",k);A0B-32768C-1D有语法错误,无输出这道题选B为什么请高手帮我分析一下!谢谢了!书... 以下程序段的输出结果是:()
int k =32768;printf("%d",k);
A 0
B -32768
C -1
D 有语法错误,无输出
这道题选B 为什么 请高手帮我分析一下!谢谢了!
书上的解释是int型数据类型能够表示的个数为65536
所以32768-65536=-32768 所以输出-32768
展开
 我来答
蓝色草原
2009-02-03 · TA获得超过1564个赞
知道大有可为答主
回答量:2294
采纳率:0%
帮助的人:1316万
展开全部
这个要从数据在计算机中的存储方式说起。
计算机中是以2进制补码形式存储数据的。
8位的机器中int型占2个字节,可存储的int范围为-32768~32767 。你的k=32768,存储到计算机中就是0x10000000 00000000(注意:最高位为符号位),这和-32768在计算机中存储的数据是一样的。所以输出的时候就会显示-32768 。
负数的补码算法见下面的衔接:
http://zhidao.baidu.com/question/83145029.html?si=1

参考资料: http://zhidao.baidu.com/question/83145029.html?si=1

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
JasonTH
2009-02-03 · TA获得超过294个赞
知道答主
回答量:86
采纳率:0%
帮助的人:70.4万
展开全部
-32768
首先说一下楼上…0x打头是十六进制的标志
这个东西关键在于int的存储位数…而这个是与编译环境有关的…比较旧的编译环境中int是16位的…在新的如VC6中int是32位…你这个情况下的int应该是16位…32768即2^15…换成二进制是1000000000000000…在补码表示中就是-32768
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2009-02-03
展开全部
和编译器中对int最大值的规定有关
可能是32768,也可能是-32768

就本题来讲,只能选B了
如果有32768这个选项,也得选上
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
陆菲夜A6
2009-02-03
知道答主
回答量:25
采纳率:0%
帮助的人:24万
展开全部
因为这个32768超出了INT类型的范围,将二进制的最高位置1了,而最高位是符号位,0为正,1为负。所以就为负数了!这个你最好去看一下计算机组成原理这方面的知识!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
flamehrf
2009-02-03 · TA获得超过694个赞
知道小有建树答主
回答量:331
采纳率:0%
帮助的人:312万
展开全部
整型数据长度为-32768至32767
32768大于32767
所以计算机自动加上负号显示
课本上有例题的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式