Chinaunix首页 | 论坛 | 博客
  • 博客访问: 117279
  • 博文数量: 19
  • 博客积分: 396
  • 博客等级: 一等列兵
  • 技术积分: 156
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-29 09:11
文章分类

全部博文(19)

文章存档

2012年(3)

2011年(16)

分类: LINUX

2011-11-23 20:53:39

2的补码

考虑以2的补码形式来表示一个n位整数A。若A是正的,则符号位”an-1”是0,其余位表示此数的幅值,因此有:

clip_image002 对于A≥0

数零被认为是正的,因此表示为符号位值为0和所有幅值位都为0.可见, 正整数可表示的范围是由0(所有幅值全为0)到2n-1-1(所有幅值位全为1)。再大的数将需要更多位。

对于一个负数A(A<0),其符号位an-1是1.其余n-1位能取2n-1个值中的某个值。于是,负整数可表示的范围是-1到-2n-1。对于n-1位值与负整数值的对应,我们希望以这样一种方式来指派负整数的位值,它能使算术运算能直截了当地处理。

在无符号整数表示中,要从n位值的表示计算得到整数的值,是由各位乘以位权值取和而得到的,最高有效位的权是+2n-1

对于一个有符号位的表示法,如果最高位的权是-2n-1,那么算术运算性质将得到满足。

2的补码 clip_image004

在正整数的情况下,an-1=0, 故-2n-1an-1 = 0,这样表达式定义了一个非负整数。

不同位长间的转换:

2的补码整数的扩展规则是,移符号位到新的最左位,其余空出位均以符号位的值填充。即对于正整数填充0,对于负整数填充1。

取负:

1)将整数的每一位(包括符号位)取反(布尔反),即把每个1变为0,0变为1.

2)将此取反结果作为一个无符号二进制整数对待,加1。

加法:

2的补码的加法执行过程与无符号整数加法一样。得考虑溢出。

减法:

求出减数2的补(取负),并把它加到被减数上。

if ($ != jQuery) { $ = jQuery.noConflict(); } var isLogined = true; var cb_blogId = 102450; var cb_entryId = 2260760; var cb_blogApp = "yhwang"; var cb_blogUserGuid = "cd34d4dc-5014-e111-b422-842b2b196315"; var cb_entryCreatedDate = '2011/11/23 20:33:00';

阅读(3136) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~