黑马程序员技术交流社区

标题: 学习C语言的过程中遇到的一个小问题,求解释 [打印本页]

作者: whbsspu    时间: 2014-10-22 18:07
标题: 学习C语言的过程中遇到的一个小问题,求解释
本帖最后由 whbsspu 于 2014-10-22 22:03 编辑

我在学习C语言的过程中遇到一个问题,那就是一个占2字节,即16位的有符号机器数(此处是基本整型),它能表示的范围是-2^15~2^15-1   右边的界限很好理解,但是为什么在表示负数时会达到-2^15呢,比如说,共有3位的话,那么最小应该是表示到-3才对呀,即-2^2+1才对呀,请帮忙解释一下,谢谢!



作者: chri_liu    时间: 2014-10-22 18:31
给你个程序,自己看了以后好好理解。
main()
{int x,y;
x=32767,y=x+1;
printf("%d,%d\n",x,y);
}
运行结果:32767,-32768
这是因为字长里最高位为1表示负数,为0表示正数。32767就表示为0111111111111111(15个1),即为2^15-1,32767加1后就为1000000000000000(15个0),它是-32768的补码形式。
建议你好好温习一下补码。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2