C语言问题(关于VC++6.0中的int与short int)(详细看下图)
展开全部
书有错
书里说的是正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]);
}
书里说的是正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]);
}
展开全部
这个解释总觉得不对。
应该是 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
所以,题目应该有问题。
应该是 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的补码就是我求的那个。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询