128的二进制有原码反码和补码 (1)
计算机组成原理第2章例题及参考答案

计算机组成原理第2章例题及参考答案第⼆章数码系统例题及答案例题1写出下列各数的原码、反码、补码、移码(⽤⼆进制数表⽰)。
(1)-35/64 (2)23/128 (3)-127(4)⽤⼩数表⽰-1 (5)⽤整数表⽰-1 (6)⽤整数表⽰-128解:-1在定点⼩数中原码和反码表⽰不出来,但补码可以表⽰,-1在定点整数中华表⽰最⼤的负数,-128在定点整数表⽰中原码和反码表⽰不出来,但补码可以。
例题2设机器字长为16位,分别⽤定点⼩数和定点整数表⽰,分析其原码和补码的表⽰范围。
解:(1)定点⼩数表⽰最⼩负数最⼤负数0 最⼩正数最⼤正数⼆进制原码 1.111...111 1.000...001 0.000...001 0.111 (111)⼗进制真值- (1-215) -2152-151-2-15原码表⽰的范围:- (1-215) ~1-2-15⼆进制补码 1.000...000 1.111...111 0.000...001 0.111 (111)⼗进制真值-1 -2152-151-2-15原码表⽰的范围:- 1 ~1-2-15(2)定点整数表⽰最⼩负数最⼤负数0 最⼩正数最⼤正数⼆进制原码1111...111 1000...001 0000...001 0111 (111)⼗进制真值- (215-1) -1 +1 215-1原码表⽰的范围:- (215-1) ~215-1 [-32767 ~ +32767]⼆进制补码1000...0001111...111 0000...001 0111 (111)⼗进制真值-1 +1 215-1原码表⽰的范围:- 215~215-1 [-32768 ~ +32767]⼀、选择题1.下列数中最⼩的数为()。
A.(101001)2B.(52)8C.(101001)BCD D.(233)162.下列数中最⼤的数为()。
A.(10010101)2B.(227)8C.(96)16D.(143)53.在机器数中,()的零的表⽰形式是惟⼀的。
二进制5位数原码、补码、反码表

原码、补码和反码是在计算机中常用的一种数据表示方式。
在这种表示方式中,正数和负数均采用二进制形式表示,通过一定的规则进行转换。
本文将以二进制5位数为例,对原码、补码和反码进行详细介绍和表格展示。
一、二进制5位数原码、补码、反码定义1.1 原码定义原码是最简单的一种表示方式,它的规则是:正数的原码就是其二进制形式,负数的原码是在正数原码的基础上将最高位(符号位)变为1。
+2在5位二进制数中的原码是xxx,-2在5位二进制数中的原码是xxx。
1.2 补码定义补码是计算机中常用的一种表示方式,它的规则是:正数的补码就是其二进制形式,负数的补码是将其绝对值的原码按位取反然后加1。
+2在5位二进制数中的补码是xxx,-2在5位二进制数中的补码是xxx。
1.3 反码定义反码是原码的一种变换形式,它的规则是:正数的反码就是其二进制形式,负数的反码是将其绝对值的原码按位取反。
+2在5位二进制数中的反码是xxx,-2在5位二进制数中的反码是xxx。
二、二进制5位数原码、补码、反码表以下是以二进制5位数为例的原码、补码和反码一览表:原码补码反码xxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxx三、总结通过以上原码、补码和反码的定义和表格展示,我们可以清楚地了解二进制5位数的原码、补码和反码之间的转换规则和关系。
二进制补码规则

二进制补码:定义、计算方法、特点和应用二进制补码是一种用二进制表示有符号整数的方法,它可以使正数和负数的加减法运算更加简单和高效。
本文将介绍二进制补码的定义、计算方法、特点和应用,以及与原码和反码的区别和联系。
一、二进制补码的定义在计算机中,通常用一个固定长度的二进制数来表示一个有符号整数,其中最高位为符号位,0表示正数,1表示负数,其余位为数值位。
例如,用一个8位的二进制数来表示十进制数-5,可以写成10000101,其中第一位1是符号位,表示这是一个负数,后面七位0000101是数值位,表示这个数的绝对值是5。
但是,在计算机中,不同的二进制表示方法会导致不同的运算规则和结果。
为了方便计算机进行有符号整数的加减法运算,人们提出了三种不同的二进制表示方法:原码、反码和补码。
其中,补码是最常用的一种方法,它的定义如下:正数的补码等于其原码,即符号位为0,数值位为其二进制形式。
负数的补码等于其原码除符号位外按位取反再加1,即符号位为1,数值位为其绝对值的二进制形式按位取反再加1。
例如,用一个8位的二进制数来表示十进制数5和-5的补码,可以写成:十进制原码补码50000010100000101-51000010111111011可以看出,正数的补码和原码相同,而负数的补码是在原码的基础上除符号位外按位取反再加1得到的。
例如,-5的原码是10000101,除符号位外按位取反得到11111010,再加1得到11111011。
二、二进制补码的计算方法在计算机中进行有符号整数的加减法运算时,通常先将操作数转换成补码形式,然后按照无符号整数的加减法规则进行运算,最后将结果转换成原码形式输出。
下面介绍如何进行这些步骤。
2.1 将原码转换成补码将原码转换成补码的方法很简单,只需要根据前面给出的定义进行操作即可。
具体步骤如下:如果原码表示的是正数,则直接保留原码作为补码。
如果原码表示的是负数,则除符号位外按位取反再加1得到补码。
原码,反码,补码,和取反运算——适用于二进制底层的概念理解

原码,反码,补码,和取反运算——适⽤于⼆进制底层的概念理解⾸先,看这篇⽂章之前,你需要的是不必纠结,⽐如:为什么正数的原码反码补码就⼀样呢,负数的原码反码补码就各不相同呢?看这篇⽂章之前你只需要记住,这是⼈为规定的。
你可能会想,为什么要这样⼈为规定呢,我现在只能告诉你,这样规定有利于计算机底层对数字进⾏操作,也就是说,这种规定对计算机的底层硬件要求简化了,技术实现起来更简单。
我们⽇常⽤的数字是给我们⼈类⽤的,所以叫真值。
⽽机器(计算机)理解的数字通常是⼆进制所组成的数字,所以称为机器数。
⼆进制在内存中以补码形式在其中存储,计算机计算数字是通过补码的形式进⾏计算的,也就是说不管正数,还是负数在计算机⾥⾯,都要⽤补码来表⽰。
在原码,反码,补码中,最⾼位来表⽰正负,⽤0表是正,1表⽰负;如⼗进制的10表⽰为:+1010--->原码:0 1010;-1010--->原码: 1 1010;笔记⼀:原码,反码,补码*规则:正数中:原码=反码=补码;例⼦拿上⾯的:+1010---> 0 1010;+1010--->原码: 0 1010;(最⾼位0表⽰正号)+1010--->反码: 0 1010;+1010--->补码: 0 1010;+1010--->移码: 1 1010(补码符号位取反)负数中的规则如下:例⼦拿上⾯的:-1010---> 1 1010;-1010--->原码: 1 1010;(最⾼位1表⽰负号)-1010--->反码: 1 0101;(符号位不变,数值位:0变1,1变0)-1010--->补码: 1 0110;(符号位不变,数值位:0变1,1变0。
最后得出来的数字再加1。
简单点总结为:“反码加1”)-1010--->移码: 0 0110(补码符号位取反)最后注释:移码:⽆论正负数,都是补码的符号位取反。
还有这⾥解释⼀下,为什么计算机实际计算数字是⽤补码进⾏运算的,如果你看了我上⾯的例⼦的话,应该清楚了,不管是正数,还是负数,在计算机中,补码最⾼位都是1,意思就是说,补码的作⽤,把正数规定还是正数,⽽负数还是负数,但是正负数进⾏运算的时候转变为加法形式,例如:3-5变成3+(-5).这样⼦,计算机底层很容易实现加法运算。
二进制原码、反码和补码-带符号数的机器码表示方法

原码、反码和补码 —— 带符号数的机器码表示方法1.带符号二进制数的表示方法:2、符号位的表示:最常用的表示方法有原码、反码和补码。
(1)原码表示法一个机器数x 由符号位和有效数值两部分组成,设符号位为x 0,x 真值的绝对值|x|=x 1x 2x 3...x n ,则x 的机器数原码可表示为:[x]原= n x x x x ...210,当x>=0时,x 0=0,当x<0时,x 0=1。
例如:已知:x 1=-1011B ,x 2= +1001B ,则x 1,x 2有原码分别是[x 1] 原=11011B ,[x 2]原=01001B规律:正数的原码是它本身,负数的原码是取绝对值后,在最高位(左端)补“1”。
(2)反码表示法一个负数的原码符号位不变,其余各位按位取反就是机器数的反码表示法。
正数的反码与原码相同。
按位取反的意思是该位上是1的,就变成0,该位上是0的就变成1。
即1=0,0=1例:B x 10111-=,B x 10012+=,求反][1x 和反][2x 。
解:反][1x =B 10100,反][2x =B 01001(3)补码表示法首先分析两个十进制数的运算:78-38=41,79+62=141如果使用两位数的运算器,做79+62时,多余的100因为超出了运算器两位数的范围而自动丢弃,这样在做78-38的减法时,用79+62的加法同样可以得到正确结果。
模是批一个计量系统的测量范围,其大小以计量进位制的基数为底数,位数为指数的幂。
如两位十进制数的测量范围是1——9,溢出量是100,模就是102=100,上述运算称为模运算,可以写作:79+(-38)=79+62 (mod 100)进一步写为 -38=62,此时就说 –38的补法(对模100而言)是62。
计算机是一种有限字长的数字系统,因此它的运算都是有模运算,超出模的运算结果都将溢出。
n 位二进制的模是2n ,一个数的补码记作[x]补,设模是M ,x 是真值,则补码的定义如下:⎩⎨⎧<+≥=)0()0(][][x x M x x x 原补例:设字长n=8位,x=-1011011B ,求[x]补。
计算机基础-二进制原码、反码、补码

二进制原码, 反码, 补码的基础概念和计算方法一. 原码, 反码, 补码的基础概念和计算方法.1. 原码:原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制:[+1]原 = 0000 0001[-1]原= 1000 0001第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是:[1111 1111 , 0111 1111]即[-127 , 127]2. 反码反码的表示方法是:正数的反码是其本身负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.[+1] = [00000001]原 = [00000001]反[-1] = [10000001]原 = [11111110]反3. 补码补码的表示方法是:正数的补码就是其本身负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1 (即在反码的基础上+1)[+1] = [00000001]原 = [00000001]反 = [00000001]补[-1] = [10000001]原 = [11111110]反 = [11111111]补二. 为何要使用原码, 反码和补码计算机可以有三种编码方式表示一个数.对于正数因为三种编码方式的结果都相同:[+1] = [00000001]原 = [00000001]反 = [00000001]补但是对于负数:[-1] = [10000001]原 = [11111110]反 = [11111111]补机器可以只有加法而没有减法计算十进制的表达式: 1-1=01.如果用原码表示1 - 1 = 1 + (-1) = [00000001]原 + [10000001]原 = [10000010]原 = -2让符号位也参与计算, 显然对于减法来说, 结果是不正确的.这也就是为何计算机内部不使用原码表示一个数.2.如果用反码表示1 - 1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原= [0000 0001]反 + [1111 1110]反= [1111 1111]反= [1000 0000]原= -0用反码计算减法, 结果的真值部分是正确的. 而唯一的问题其实就出现在"0"这个特殊的数值上. 虽然人们理解上+0和-0是一样的, 但是0带符号是没有任何意义的.而且会有[0000 0000]原和[1000 0000]原两个编码表示0.3.用补码表示1-1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原= [0000 0001]补 + [1111 1111]补= [0000 0000]补=[0000 0000]原=0这样0用[0000 0000]表示, 而以前出现问题的-0则不存在了.而且可以用[1000 0000]表示-128:(-1) + (-127) = [1000 0001]原 + [1111 1111]原= [1111 1111]补 + [1000 0001]补= [1000 0000]补=-128注:-1-127的结果应该是-128, 在用补码运算的结果中, [1000 0000]补就是-128. 但是注意因为实际上是使用以前的-0的补码来表示-128, 所以-128并没有原码和反码表示.(对-128的补码表示[1000 0000]补算出来的原码是[0000 0000]原, 这是不正确的)使用补码, 不仅仅修复了0的符号以及存在两个编码的问题, 而且还能够多表示一个最低数. 这就是为什么8位二进制, 使用原码或反码表示的范围为[-127, +127], 而使用补码表示的范围为[-128, 127].(-1) + (-1) = [1000 0001]原 + [1000 0001]原= [1111 1111]补 + [1111 1111]补= [1111 1110]补//负数原码=补码-1,再同位取反,符号位不变=[1000 0010]原=-2因为机器使用补码, 所以对于编程中常用到的32位int类型, 可以表示范围是: [-231, 231-1] 因为第一位表示的是符号位.而使用补码表示时又可以多保存一个最小值.三.总结综上所述,原码、反码和补码是计算机中用于表示有符号二进制数的三种重要方法。
关于-128,+128,-0,+0,-1的反码补码

关于-128,+128,-0,+0,-1的反码补码⼀.反码的范围反码表⽰法规定:正数的反码与其原码相同。
负数的反码是对其原码逐位取反,但符号位除外。
在规定中,8位⼆进制码能表⽰的反码范围是-127~127。
此时(字长为8位), -128没有原码和反码(只有补码)。
那么,为什么规定字长8位时-128没有原码和反码呢?下⾯解释。
⾸先看-0,[-0]原码=1000 000,其中1是符号位,求反操作,算出[-0]反码=1111 1111,再看-128,假如它有原码且[-128]原码=1000 000,假如让-128也有反码,求反操作,则[-128]反码=1111 1111,你会发现,-128的反码和-0的反码相同,所以为了避免⾯混淆,有了-0的原码,便不能有-128的原码补码,这是8位⽐特位位数限制决定的。
⼆.原码反码补码的范围前提:字长是8位⼆进制数。
原码 -127~127 (-128没有原码反码,原因看前⾯解释~)反码 -127~127补码 -128~127对于n位⼆进制数:你会发现,补码⽐其它码多⼀位,这是为什么呢?问题出在0上。
[+0]原码=0000 0000, [-0]原码=1000 0000[+0]反码=0000 0000, [-0]反码=1111 1111[+0]补码=0000 0000, [-0]补码=0000 0000你会发现,+0和-0的补码是⼀样的。
即 0的补码只有⼀种表⽰。
这⾥解释⼀下[-0]补码是怎么得来的。
负数的补码就是反码整体加⼀。
符号位上的进位舍弃。
(所以,舍弃了符号位的补码的第⼀位是数值位,不是符号位,符号位舍弃了)另外解释⼀下原码符号位和补码符号位的关系,补码的符号位不是保持原码的第⼀位不变,⽽是符号位不变,[-0]反码的第⼀个1是符号位,尾数中的7个1是数值位,尾数加⼀后,数值位产⽣了进位,1111 1111+1=1 0000 0000(计算补码的过程中,并不是先保证第⼀位不变,⽽是保证符号位不变,保证补码规则是反码整体加⼀)。
8位原码反码补码表——讲义资料文档

说明如下:*****************************************************************************对于8位带符号的二进制数:原码:范围-127~-0,+0~+127二进制正数 0 0000000-0 1111111 ,十进制+0~+127,共128种状态二进制负数 1 0000000-1 1111111 ,十进制-0~-127,共128种状态反码:范围-127~-0,+0~+127二进制正数 0 0000000-0 1111111 ,十进制+0~+127,共128种状态二进制负数 1 1111111-1 0000000 ,十进制-127~-0,共128种状态补码:范围-128~0~+127二进制正数0 0000000-0 1111111 ,十进制+0~+127,共128种状态二进制负数 1 0000000-1 0000001 ,十进制-128~-1,共128种状态注:[-0]补码=[-0]反码+1=1 11111111+1= 00000000=[+0]补码,即[-0]补码=[+0]补码[-1]补码=[1 0000001]补码=1 1111110+1=1 1111111,即[-1]补码是-127[-127]补码=[1 1111111]补码=1 0000000+1=1 0000001,即[-127]补码是-1[-128]补码=[-127]补码+[-1]补码 = 1 0000001+1 1111111 =1 0000000结论:原码范围:-127~-0,+0~+127,256种状态反码范围:-127~-0,+0~+127,256种状态补码范围:-128~-1,+0~+127,256种状态,因为[-0]补码和[+0]补码相同,在补码中-128代替了-0。
也可认为是一种规定,这样可都是256种状态。
要注意:(-128)没有相对应的原码和反码, (-128) = (10000000)*****************************************************************************。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一次修订 2009-5-6 14:11
---------------------
1.模的概念(我只讲个例子,具体的可以查数学中的 "同余模")
在日常生活中,有许多化减为加的例子。
例如,时钟是逢12进位,12点也可看作0点。
当将时针从10点调整到5点时有以下两种方法:
1.将时针逆时针方向拨5格,相当于做减法: 10-5=5
2.将时针顺时针方向拨7格,相当于做加法:10+(12-5)=12+5=5 (模为 12) 2.模的运用(采用模得到补码)
1.补码的得来:是为了让负数变成能够加的正数,so,负数的补码=模-负数的绝对值
比如:-1 补码:1111 1111(10000 0000 -1得来)
当一个数要减1的时候,可以直接加 1111 1111
2.原码的得来:(负数的原码,直接把对应正数的最高位改为1)
原码能够直观的表示一个负数(能直观的把真值显示出来,如 -1为1000 0001
其中最高位表示符号位,不进行算术计算) 3.总结:补码相加,到第9位才舍弃(模10000 0000)
原码相加,到第8位舍弃(模1000 0000)
反码相加,到第8位舍弃(模1000 0000)
3.原码和补码之间转换:
1.补码=原码减1,再取反(便于理解)
或补码= 反码+1(便于描述和推理)
2.演示:补码=原码减1,再取反
如-1的原码1000 0001-->1000 0000(减1后)-->1111 1111(取反后)补码
3.演示:补码= 反码+1)
如-1的原码 1000 0001-->1111 1110(反码)-->1111 1111(加1)补码
4.重点:(特别是在有进位的时候)
原码和反码的最高位是符号位,不参加算术运算,模为1000 0000(比补码少一个0)
而补码所有位都可以相加,模为10000 0000(最高位不是符号位,补码是通过模减去负数绝对值得到的)
5.推断-128的原码和补码(用补码= 反码+1)
1.关于原码1000 0000,表示的是-0,还是-128呢?(答案是-128而不是-0)
1.先看看原码的概念吧:正数的符号位为0,负数的符号位为1,其它位按照一般的方法来表示数的绝对值
2.0是负数吗?0既不是正数也不是负数,那么它的符号位到底是0还是1呢?(0的符号位为0,不能为1)
3.看看负数补码的公式:负数的补码=10000 0000(模)-数的绝对值
比如:-1 1111 1111 =10000 0000-0000 0001
-2 1111 1110 =10000 0000-0000 0010
现在假设-0为负数,那么
-0的补码应该是10000 0000 - 0(这个0,姑且教0的绝对值吧)=0000 0000 反码:1111 1111(0000 0000 -1=0000 0000 +1111 1111=1111 1111)
原码:1000 0000
现在来推-128
-128的补码:10000 0000 - 1000 0000(+128没有符号位)=1000 0000
反码:1111 1111(1000 0000 -1=1000 0000+1111 1111=1111 1111)(补码-1)
原码:1000 0000(反码取反)
从上面看来,一个原码对应了2个补码
但是仔细分析:原码的概念,负数的符号位为1,但是0不是负数,所以不能用此公式
0也不是正数,但是可以把0定义为原码、反码和补码都一样(即0000 0000)
而且据说可以推断出0的补码只有一个(有兴趣的可以去推一下,呵呵)
现在原码1000 0000就唯一表示-128了,而不会表示出-0,因为-0不能用这个公式计算
现在,补码1000 0000的原码是1000 0000(已证明),那么原码1000 0000的补码是1000 0000吗?
原码 1000 0000 (-128,进位被舍去)
反码 1111 1111
补码 1000 0000(1111 1111(反码) + 1=1000 0000,这里实际上真正相加的是1111 1111后面的7位,
第1位是符号位始终不会变,所以,当进到第8位的时候,就表示溢出了,会被舍弃)
2.综上所述:1.-128的补码和原码一样都是1000 0000,
2.0的原码、反码和补码都一样(即0000 0000)
3.如果把-0当做负数,1000 0000就会有歧义(事实上0的补码只有一个0000 0000)
第一次的手稿 2009-5-5 22:47
-----------------
1.使用反码的意义:
1.使符号位能与有效值部分一起参加运算,从而简化运算规则。
从而可以简化运算器
的结构,提高运算速度;
(减法运算可以用加法运算表示出来。
)
2.加法运算比减法运算更易于实现。
使减法运算转换为加法运算,进一步简化计算机
中运算器的线路设计。
2.负数的二进制数串表示一般用补码:(如何通过原码推补码,特别是-128的解释)
1.先给出3个原则:
1.因为使用补码可以将符号位和其他位统一处理,同时,减法也可以按加法来处理,
即如果是补码表示的数,
不管是加减法都直接用加法运算即可实现。
2.两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃(模的概念,补码的模10000 0000)
比如:1111 1111(-1) +1000 0001(-127)=1000 0000(-128,实际上最高位有3个1,
进位一次后,还保留一个1)
1111 1110(-2) + 0000 0100(4) = 0000 0010(2)
3.模的规则:(自己的推断)
1.补码的模为10000 0000
2.反码的模为1000 0000(从反码的定义也能够知道,即反码的运算不涉及符
号位)
3.模的解释
在日常生活中,有许多化减为加的例子。
例如,时钟是逢12进位,12点也可
看作0点。
当将时针从10点调整到5点时有以下两种方法:
1.时针逆时针方向拨5格,相当于做减法: 10-5=5
2.时针顺时针方向拨7格,相当于做加法:10+(12-5)=12+5=5 (模为 12)
2.原码、反码和补码的定义:(主要讨论负数的)
1.正整数的原码、反码和补码都一样
2.负数:
1.原码就是原来的表示方法
2.反码是原码除符号位(最高位)外取反
3.补码=反码+1
3.举例:以一个单字节来说:(即8位)
-1 原码 1000 0001(通过原码得到真值)
反码 1111 1110
补码 1111 1111(通过补码得到二进制)
-2 原码 1000 0010
反码 1111 1101
补码 1111 1110
**如此类推:原码 1000 0000 (-128)(重点)
反码 1111 1111
补码 1000 0000(1111 1111 + 1=1000 0000,这里实际上真正相加的是1111 1111后面的7位,
第1位是符号位始终不会变,所以,当进到第8位的时候,就表示溢出了,所以会被舍弃,
也就是说反码的模是1000 0000,而补码的模是:10000 0000比反码多一位)
如果用补码反推原码
补码1000 0000
反码1111 1111(1000 0000 -1=1000 0000+1111 1111(相当于2个补码相加,可用模的规则)=1111 1111)
原码1000 0000
4.感慨:很多群人解释不通了,就武断的说-128的二进制为1000 0000,并断定它没有反码和原码,还说是"规定"
而我怎么也没有找到官方的这么个规定(个人觉得这是不严谨的也是不负责任的,呵呵)
5.具体的计算演示:
1+(-1)=0
0000 0001 + 1111 1111=0000 0000
1+(-2)=-1
0000 0001 + 1111 1110=1111 1111(-1)
2+(-1)=1
0000 0010 + 1111 1111=0000 0001
(-128)+1=-127
1000 0000 +0000 0001=1000 0001(补)
1000 0001(补码)
1000 0000(反码=补码-1)
1111 1111(原码 =-127)
3.有一个不正确的解释,貌似还写成书了(个人认为)
采用补码表示还有另外一个原因,那就是为了防止0的机器数有两个编码。
原码和反码表示的0
有两种形式+0和-0,而我们知道,+0和-0是相同的。
这样,8位的原码和反码表示的整数的范围就是-127~+127
(11111111-01111111),而采用补码表示的时候,00000000是+0,即0;10000000不再是-0,而是-128,这样,
补码表示的数的范围就是-128~+127了,不但增加了一个数得表示范围,而且还保证了0编码的唯一性。
我的观点:包括写上面的话的人自己也说过,10000000(补码)没有反码和原码,既然这样,如何得出结论
1000 0000曾经表示的是-0,其实通过上面的分析,1000 0000是有反码(1111 1111)和原码的(1000 0000)
4.一些好的概念:
由于计算机中符号和数字一样,都必须用二进制数串来表示,因此,正负号也必须用0、1来表示。
用最高位0表示正、1表示负, 这种正负号数字化的机内表示形式就称为“机器数”,而相应的机器外部用正负号表示的数称为“真值”,将一个真值表示成二进制字串的机器数的过程就称为编码。