计算机中数的表示方法

计算机中的数均以0和1组成各种编码,在计算机中参与运算的数有两大类: 无符号数和有符号数。
计算机中的数均放在寄存器中,通常称寄存器的位数为机器字长。

对于有符号数,我们需要使用一位标志位表示其正负符号,这就引出了几种编码表示方式。 (下面均以8位机器字长进行分析)

原码

将最高位用来表示其正负标志:

正数最高位为0
负数最高位为1

例如:

[+1]原 = 0,000 0001
[-1]原 = 1,000 0001

但是这就带来一个问题,做普通的加法运算的时候:

1+1=0,000 0001 + 0,000 0001 = 0,000 0010 = 2 正确

1-1= 1+(-1)= 0,000 0001 + 1,000 0001 = 1,000 0010 = -2 错误

这就意味着在计算减法时,我们不能直接通过原有的加法电路来计算减法,而需要重新设计专门的计算电路来处理原码表示方法中的符号位的计算。


反码

反码可以通过原码转换得到:

当值大于0时,反码和原码相同
当值小于0时,反码=保留符号位,其余部分按位取反

例:

[+1]反 = 0,000 0001
[-1]反 = 1,111 1110

对其做加法运算:

1+1=0,000 0001 + 0,000 0001 = 0,000 0010 = 2 正确

1-1= 1+(-1)= 0,000 0001 + 1,111 1110 = 1,111 1111
将其转换为原码为1,000 0000 = -0 = 0 正确


补码

补码的计算规则:

当值大于0时,补码和原码相同
当值小于0时,补码=保留符号位,其余部分按位取反,然后+1(即在反码的基础上+1)

例:

[+1] = [00000001]原 = [00000001]反 = [00000001]补
[-1] = [10000001]原 = [11111110]反 = [11111111]补

对其做加法运算:

1+1=0,000 0001 + 0,000 0001 = 0,000 0010 = 2 正确
1-1= 1+(-1)= 0,000 0001 + 1,111 1111 = 1 0000 0000
由于最高位溢出,得到0,000 0000=0 正确


从以上我们知道,原码是最适用于人类认知的一种编码方式,但是为什么会有反码和补码的编码方式呢?

从上面关于原码计算减法的计算方案我们知道,由于将符号位直接带入计算中带来的影响,在做减法的时候,往往得到的是错误的答案。

反码的提出使直接将符号位带入计算成为了可能。将减法运算,转换为加上减数的相反数,使减法计算可以复用加法计算电路。

下面我们来看如下两个数值:
[0,000 000]反 = +0
[1,111 111]反 = -0
这样就造成了0有两种表示方法,使原本8位长度的寄存器只能表示-127-0, 0-127共255个值,比无符号数的表示方法少了一个值,因为0有+0和-0两个表示方法。

而补码的出现,解决了0有+0和-0两种表达方式的困境,我们人为规定1,000 0000用来表示-128,因为原码无法表示-128,按正常程序更无法求得其补码。

这样一来,我们就只有唯一的[0]补的表现形式0,000 0000,而且多了一个[1,000 0000]补表示负数的最小值-128


通过以上我们看到,计算机通过将有符号数进行不同的进位和表示方法,巧妙地将符号位参与到了加法运算中,那么其中的数学原理是什么呢?

下面首先介绍几个概念:

同余

两个整数a,b,若它们除以整数m所得的余数相等,则称a,b对于模m同余,记作 a ≡ b (mod m),读作 a 与 b 关于模 m 同余。

例:
4 mod 12 = 4
16 mod 12 = 4
28 mod 12 = 4
所以4, 16, 28关于模 12 同余。

计算机的字长有限,当计算得到的结果大于寄存器所能的最大长度时,会发生溢出,最高位将被舍去。

例:

对于无符号数,8位寄存器所能表达的最大数字为max = 2^8-1,那么当做加法运算max+1时,由于发生溢出,最高位被丢弃,得到的结果其实是
(max+1) mod 28,只取到对于28的余数部分。
即计算机中的所有运算实际上都是关于2^字长的同余计算。

补码的数学证明

任何计数系统都必须有两个参数:容量精度

是衡量计数系统容量的参数。模代表了计数系统所能表示和存储的状态数。

比如对于字长为8的计算机,其最大能表示0-255的数,所以其模为256=28

任何有限的计数系统都有一个确定的模。如时钟的模是12,时钟每经过12小时会重新从1开始计数。

计算机同样也是一个有限容量的计数系统,其模m=2字长

设m > b >= 0,b为整数
则b的补 b = m – b (这里定义的是补,而不是补码)

由于有正负数,计算机中对正负数的补码进行了区分定义:
1> 正整数b的补码为自身,即b的补码仍为b
2> 负整数-b的补码为b的补,即b
我们知道,a - b即可转化为 a + (-b),如果用补码来运算
a – b = [a + (-b) ] (mod m) 在计算机中计算的是 [a + b ] (mod m)

如果能证明 [a + (-b) ] (mod m)与[a + b ] (mod m)同余,那么就能说明通过以上两个式子在计算机中都能得到正确的值。

∵ b = m – b

∴ a + b = a + (m – b) = a - b + m

又 ∵a - b + m 与a - b关于m同余

∴ a - b 和 a + b关于m同余

∴ 将负数转化为补码进行计算后,仍然是成立的

所以,计算机中用补码来储存所有的数后,就不需要增加减法器了,用加法器就可以代替计算减法,这样能节省电路设计。

.

参考资料:
http://www.cnblogs.com/organic/p/6486676.html
http://blog.csdn.net/vickyway/article/details/48788769
http://baike.baidu.com/item/%E5%90%8C%E4%BD%99%E5%AE%9A%E7%90%86/1212360?fromtitle=%E5%90%8C%E4%BD%99&fromid=1432545
https://zh.wikipedia.org/wiki/%E5%90%8C%E9%A4%98
https://www.zhihu.com/question/20159860/answer/21113783

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容