【转】关于int范围中负数最小值的绝对值比整数最大值大初学C,问题源自:为什么C中的int类型(16位)的下溢下限为-32768而上溢上限却是32767。 首先说吧,32767很容易理解,32767=
来源:互联网 发布:ubuntu查看分区 编辑:程序博客网 时间:2024/05/12 04:10
初学C,问题源自:为什么C中的int类型(16位)的下溢下限为-32768而上溢上限却是32767。
首先说吧,32767很容易理解,32767=2^15-1 (因为要有一个符号位),但为什么下溢的时候分明是15位来表示的数会出现32768呢??
首先从原码讲起,原码即为计算机中对数值的二进制表示,如 5用二进制表示为0000 0101 ;
其次就是反码,反码,顾名思义取反,对于正数来说,反码与原码相同;对于负数来说,反码为原码的各位取反(符号位除外),如(0011 0111)反= 0011 0111
再次就是补码,计算机中,数值疑虑用补码表示和存储的,正数的补码与原码相同,负数的补码为其反码+1,如(0101 1101)补=0101 1101
由于计算中的CPU只有加法器,没有减法器,所以在计算机采用原码做减法是会存在这样的问题:对于1-1=0
看做1+(-1)=0 二进制表示 0001+1001=1001 变成了十进制的负1而不是0。补码的出现很好的解决了这个问题,由于采用补码运算,则补码加法成为:[X+Y]补 = [X]补 + [Y]补同时,补码的减法变为:[X-Y]补 = [X]补 - [Y]补 = [X]补 + [-Y]补
另外,补码还解决了原码中存在两个0 的问题(即+0 和 -0),以8进制为例,int_8的取值范围应该是-127~ -0和+0~ 127 即存在正0
对,当然是少了一个,对于1000 0000 ,任何原码都不能转换成补码后成为1000 0000的形式
但数是死的,人是活的,不能让XX憋死不是? 所以人为规定补码中 1000 0000 表示 -128 ,这就很好的解释了,为什么8位的整形变量的下溢下界会是-128而上溢上届是127了。
同样,对于16进制int,也是这样, 表示范围成了 - 32768 ~ 32767
原文:http://blog.sina.com.cn/s/blog_9e67285801010vms.html
我总是忘记,mark一下~~
- 【转】关于int范围中负数最小值的绝对值比整数最大值大初学C,问题源自:为什么C中的int类型(16位)的下溢下限为-32768而上溢上限却是32767。 首先说吧,32767很容易理解,32767=
- 关于int范围中负数最小值的绝对值比整数最大值大初学C,问题源自:为什么C中的int类型(16位)的下溢下限为-32768而上溢上限却是32767。 首先说吧,32767很容易理解,32767=
- 【转】关于int范围中负数最小值的绝对值比整数最大值大初学C,问题源自:为什么C中的int类型(16位)的下溢下限为-32768而上溢上限却是32767。 首先说吧,32767很容易理解,32767
- 为什么int类型(16位)的下溢下限为-32768而上溢上限却是32767
- 关于int类型取值范围的计算 以及为何16位int类型范围是- 32768 ~ 32767
- c语言中int(2byte)的表示范围是为什么是-32768~32767!
- 为什么int的负数绝对值大1
- c语言中int的表示范围是-32768~32767!
- 为什么C语言中int的表示范围是-32768~32767
- 为什么说C语言中int的表示范围是-32768~32767?
- 为什么C语言中int的表示范围是-32768~32767
- 为什么C语言中int的表示范围是-32768~32767
- 为什么C语言中int的表示范围是-32768~32767
- C/C++中各种数据类型 如 int ,char long,double 的范围(最大值和最小值)
- 为什么16位系统下,int类型能够表示的范围是:-32768到32767,而不是从-32767到32767呢?
- why c语言中int的表示范围是-32768~32767(假设int占用2个字节)
- C支持的Int最大值与最小值
- 什么c语言中int的表示范围是-32768~32767
- 在PL/SQL DEV里面有把锁一样的按钮,点击它会跳出“these query result are not updateable,include the ROWID to get updateab
- 偶目匈瘴栈匙雀擞房壳雀廊阅仓脚
- 缮佬房垢汗瓜瓮瞧成瘸乐衔铝右垢
- (未完)linux相关网站
- UML用例图总结
- 【转】关于int范围中负数最小值的绝对值比整数最大值大初学C,问题源自:为什么C中的int类型(16位)的下溢下限为-32768而上溢上限却是32767。 首先说吧,32767很容易理解,32767=
- C语言\b转义字符
- Scrapy研究探索(四)——中文输出与中文保存
- 黑马程序员--Java面向对象——(其他对象)
- 一款jquery智能提示邮箱列表特效
- 驱动中bus,devices,driver注册的先后顺序
- VS2010中 C++创建DLL图解
- xfce下thunar启动慢解决
- java 继承 及 初始化顺序