注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

编程学习

我的网上家园

 
 
 

日志

 
 

负数在计算机中的表示  

2013-03-10 16:31:42|  分类: 80x86汇编学习 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
计算机内部的数据存储:

无论是指令还是数据在计算机中都是以二进制方式存储的.
计算机存储的最小单位是字节,一个字节8个二进制位,每个二进制位只能表示0或者1这两个数值.

一个字节最大可以表示的无符号数:

8个二进制位全部为1的时候,是最大可以表示的数值,转换成十进制数是255. 在这种情况下,数
值没有正负之分,8个二进制位可以表示的数值范围是0~255.


二进制减法:

10-01=1

  1 0
- 0 1
----- 
= 0 1

被减数右边是0,需要从左边借位,借位以后,左边变成0,只需要进行右边的运算.
右边的减法是 2-1=1. 二进制数制是逢二进一的,借位过来是2,2-1=1,这个不要犯迷糊.

计算机内部负数的产生: 0-1=?

  0 0 0 0 0 0 0 0
- 0 0 0 0 0 0 0 1
-----------------
= 1 1 1 1 1 1 1 1 

分析一下上面运算的过程: 最右边是0 从左边借位,左边是0,需要继续借位,按照这样借位
的结果,将会是 ......11111111 ,当只有一个字节时(8个进制位),运算结果是1111 1111
用十六进制表示就是 0xFF.

0-1=-1 在计算机内部运算结果是 1111 1111
0-2=-2 在计算机内部运算结果是 1111 1110
按照上面的运算结果,我们可以看到负数的变化范围是 1111 1111 ~ 1000 0000

当 1000 0000 -1 时,结果是 0111 1111,这样结果就超出了范围.
  1 0 0 0 0 0 0 0
- 0 0 0 0 0 0 0 1
-----------------
= 0 1 1 1 1 1 1 1


我们再来看一下 正数 的二进制表示 
0000 0001   正1
0000 0010   正2
 ... ...
0111 1111   正数 127

0111 1111 是可以表示的最大正值.当0111 1111 +1时,结果会变成 1000 0000,这样结果也会超
出范围.
  0 1 1 1 1 1 1 1
+ 0 0 0 0 0 0 0 1
-----------------
= 1 0 0 0 0 0 0 0


与上面负数对比一下,我们发现原来负数的最高位是1,而正数的最高位是0.这样8个二进制位就可
以分别表示正数与负数了.


有符号数需要一个字节来存储符号(正负): 

我们至少需要一个字节来标识符号位,我们用最高位来表示符号位,最高位是0的时候,表示正数,最高位
是1的时候表示这是一个负数.这样以来,8个二进制位可以表示的最大正数是 0 111 1111(十进制数127);
可以表示的最小负数是 1 000 0000.


-1 是 1 111 1111 ,那么 1 000 0000 就是最小的负数了(-1大于-2),你可能会有疑问,这个最小的负数
是多少呢?别急,下面我们会讲到如何进行转换.

如何把一个正数变成一个负数?
上面其实已经说过了,用0减这个正数,就可以得到负数在计算机中的表示.

那么如何把一个负数变成一个正数呢?

把所有位进行反转,然后加1,就可以把负数变成正数.
比如 1111 1111 (-1) 反转以后是 0000 0000 ,加1 得1.
比如 1111 1110 (-2) 反转以后是 0000 0001 ,加1 得10
比如 1000 0000 反转以后变成 0 111 1111 ,加1变成 1 000 0000,十进制数是128,也就是说1000 0000的
值是负128.


反转操作也可以用减法来实现:

1111 1111 (十六进制0xff) 减负数 跟反转是相同的效果.

上面说的是字节单位,如果是字单位(16个二进制位),那么-1变成了 1111 1111 1111 1111.
以此类推,如果是双字(4字节,32位), -1 就是 1111 1111 1111 1111 1111 1111 1111 1111,
也就是十六进制的0XFFFFFFFF.

8个二进制位可以表示的有符号数范围:

1000 0000 ~ 0111 1111 用十进制数表示就是 -128 到 127

16个二进制位(一个字,2字节) 可以表示的有符号数范围:  -32768 ~ 32767

  评论这张
 
阅读(319)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017