C语言问题(关于VC++6.0中的int与short int)(详细看下图)

 我来答
L_o_o_n_i_e
2011-11-03 · TA获得超过4.2万个赞
知道大有可为答主
回答量:8507
采纳率:38%
帮助的人:5246万
展开全部
书有错
书里说的是正32767和负32768 (注意,不是 负32767!)
正32767 原码: 01111111 11111111
负32767 原码: 11111111 11111111
--
揭示内码,可用 联合体输出 16进制查看:
#include <stdio.h>
#include <stdlib.h>
union x{
int a;
short s[2];
} ;

void main()
{
union x A;
A.a=32767;
printf("long 32767: %x %x %04x\n",A.a,A.s[0],A.s[1]);
A.a=0;
A.s[0] = -32767;
printf("short -32767: %x %x %04x\n",A.a,A.s[0] & 0xffff, A.s[1]);
A.a=0;
A.s[0] = -32768;
printf("short -32768: %x %x %04x\n",A.a,A.s[0] & 0xffff, A.s[1]);
}
松甜恬0Je4ba
2011-11-03 · TA获得超过2.6万个赞
知道大有可为答主
回答量:7475
采纳率:100%
帮助的人:3462万
展开全部
这个解释总觉得不对。
应该是 1000 0000 0000 0000 像你所的那样。
-32768求补码的步骤是
先求32768的原码,也就是 1000 0000 0000 0000
然后是求反码 0111 1111 1111 1111
然后+1求补码 1000 0000 0000 0000
也就是说补码应该是 1000 0000 0000 0000
不会是 1111 1111 1111 1111
所以,题目应该有问题。
追问
[C程序设计(第四版)].谭浩强编,63页,是这样描述的。
追答
我总觉得这个解释不对,我到网上查了一下-32768的补码就是我求的那个。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式