文章目录:
- 1、二进制正,负数的原码,反码,补码三者之间是什么关系?
- 2、8位二进制原码 补码 反码的表示范围各是多少 怎么算的?
- 3、如何认识理解二进制的原码反码补码
- 4、写出23.3的二进制数的原码表示,反码表示,补码表示?
- 5、二进制数原码反码补码计算、、、
- 6、二进制中的反码、补码、原码是什么?
二进制正,负数的原码,反码,补码三者之间是什么关系?
2、符号位的表示:最常用的表示方法有原码、反码和补码。
(1)原码表示法:一个机器数x由符号位和有效数值两部分组成,设符号位为x0,x真值的绝对值|x|=x1x2x3...xn,则x的机器数原码可表示为:
[x]原=
,当x=0时,x0=0,当x0时,x0=1。
例如:已知:x1=-1011B,x2=
+1001B,则x1,x2有原码分别是
[x1]
原=11011B,[x2]原=01001B
规律:正数的原码是它本身,负数的原码是取绝对值后,在最高位(左端)补“1”。
(2)反码表示法:一个负数的原码符号位不变,其余各位按位取反就是机器数的反码表示法。正数的反码与原码相同。
按位取反的意思是该位上是1的,就变成0,该位上是0的就变成1。即1=0,0=1
(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是真值,则补码的定义如下:
例:设字长n=8位,x=-1011011B,求[x]补。
解:因为
n=8,所以模
M=28=100000000B,x0,所以
[x]补=M+x=100000000B-1011011B=10100101B
注意:这个x的补码的最高位是“1”,表明它是一个负数。对于二进制数还有一种更加简单的方法由原码求出补码:
(1)正数的补码表示与原码相同;
(2)负数的补码是将原码符号位保持“1”之后,其余各位按位取反,末位再加1便得到补码,即取其原码的反码再加“1”:[x]补=[x]反+1。
下表列出
的8位二进制原码,反码和补码并将补码用十六进制表示。
真值
原码(B)
反码(B)
补码(B)
补码(H)
+127
111
1111
111
1111
111
1111
7F
+39
010
0111
010
0111
010
0111
27
+0
000
0000
000
0000
000
0000
00
-0
1
000
0000
1
111
1111
000
0000
00
-39
1
010
0111
1
101
1000
1
101
1001
D9
-127
1
111
1111
1
000
0000
1
000
0001
81
-128
无法表示
无法表示
1
000
0000
80
从上可看出,真值+0和-0的补码表示是一致的,但在原码和反码表示中具有不同形式。8位补码机器数可以表示-128,但不存在+128的补码与之对应,由此可知,8位二进制补码能表示数的范围是-128——+127。还要注意,不存在-128的8位原码和反码形式。
8位二进制原码 补码 反码的表示范围各是多少 怎么算的?
8位二进制原码的表示范围:-127~+127。
8位二进制反码的表示范围:-127~+127。
8位二进制补码的表示范围:-128~+127。
反码是数值存储的一种,多应用于系统环境设置,如linux平台的目录和文件的默认权限的设置umask,就是使用反码原理。在计算机内,定点数有3种表示法:原码、反码和补码。
原码是计算机机器数中最简单的一种形式,数值位就是真值的绝对值,符号位位“0”时表示正数,符号位为“1”时表示负数,原码又称带符号的绝对值。为了方便整数和小数区别,整数的符号位与数值位之间用“,”隔开,小数的符号位与数值位之间用“.”隔开。
如何认识理解二进制的原码反码补码
带符号数,有三种表示方法,即:原码、反码和补码。
但是,在计算机系统中,数值一律用【补码】来表示和存储。
所以,在计算机系统中,原码和反码,都是不存在的。
使用补码的意义:可以把减法或负数,转换为加法运算。
因此,就能简化计算机的硬件。
=====================
补码的概念,来自于:补数。
比如钟表,时针转一圈,周期是 12 小时。
那么,倒拨 3 小时,可以用正拨 9 小时代替。
9,就是-3 的补数。 计算方法: 9 = 12-3。
同理,分针倒拨 X 分,可以用正拨(60-X) 代替。
60,是分针的周期。
上过中学的同学,都知道,三角函数的周期是 2π。
那么,在-π/2 和 +3π/2 这两处的函数值,一定是相同的。
算法是: +3π/2 = 2π - π/2。
------------
如果你使用两位十进制数:0~99,周期就是 一百。
那么,+99,就能够当作-1 来用。
24-1 = 23
24 + 99 = (1) 23
舍弃进位,这两种算法,功能就是相同的。
于是,99 就是 -1 的补数。
计算: 补数 = 周期 + 负数
对于其它负数,自己去求补数吧。
------------
计算机中使用二进制,补数,就改称为【补码】。
八位二进制是:0000 0000~1111 1111。
相当于十进制:0~255, 周期就是 256。
那么,-1,就可以用 255 = 1111 1111 代替。
所以:-1 的补码,就是 1111 1111 = 255。
同理:-2 的补码,就是 1111 1110 = 254。
继续:-3 的补码,就是 1111 1101 = 253。
。。。
最后:-128 的补码,就是 1000 0000 = 128。
负数补码的计算公式:【 256 + 这个负数 】。
(式中的 256 = 2^8,是八位二进制的周期。)
正数,并不存在补码的问题。
所以,正数,并没有补码,可以直接运算。
(也有人概念不清,就乱说:正数本身就是补码。)
------------
求解算式: 7-3 = 4。
计算机中,并没有减法器,必须改用补码相加。
列竖式如下:
7 的补码=0000 0111
-3的补码=1111 1101
--相加-------------
得:(1) 0000 0100 = 4 的补码
舍弃进位,只保留八位,结果完全正确。
------------
借助于补码,可以简化计算机的硬件。
原码和反码,都没有这种功能。
在计算机中,根本就没有原码和反码。
它们都是什么? 就不用关心了。
求补码,也完全用不到它们。
写出23.3的二进制数的原码表示,反码表示,补码表示?
23.3的二进制原码反码补码分别是什么呢?
正数原码反码补码相同把23.3转化为二进制
23:10111除二取余逆序排序
0.3:01001保留六位有效数字,乘而取整,正序排列
23.3:1011101001
扩展内容:
bit(位):数据存储的最小单元。在计算机二进制系统中,位,简记为b,也称为比特(bit),每个二进制数字0或1就是一个位(bit),其中每 8bit = 1 byte(字节);
二进制
二进制在计算机技术中广泛应用。二进制数用0和1两个数字及其组合来表示任何数,二进制的进位规则是:“逢2进1”。数字1在不同的位上代表不同的值,按从右至左
的次序,这个值以2倍递增。
无符号数和有符号数
在计算器中参与运算的数有两大类:无符号数和有符号数
(1)有符号数:
对于有符号数而言,符号的正、负机器是无法识别的,但由于“正、负”恰好是两种截然不同的状态,如果用“0”表示“正”,用“1”表示“符”,这样符号也被数字化了,
并且规定将它放在有效数字的前面,即组成了有符号数。所以,在二进制中使用最高位(第一位)来表示符号,最高位是0,表示正数;最高位是1,表示负数。
(2)无符号数:
无符号数是针对二进制来讲的,无符号数的表数范围是非负数。全部二进制均代表数值(所有位都用于表示数的大小),没有符号位。即第一个"0"或"1"不表示
正负。
例子:
(1)在Java中int数据类型是怎么在计算机中表示的呢?
在二进制系统中是以bit(位)来作为数据存储单元的(详细内容请看前言),假设 int number = 1 ,那么number在计算机系统中将表示如下:
00000000 00000000 00000000 00000001
同理可得,number=-1 时,在二进制中表示如下:
10000000 00000000 00000000 00000001
注意:最高位(第一位)是符号位,因为是number值为1是一个正数,所以最高位为0;
(2)二进制转十进制?
要从右到左用二进制的每个数去乘以2的相应次方(次方要从0开始算起);
假如:二进制数1101转化成十进制 ,那么 1101 = 1*20+0*21+1*22+1*23 = 1+0+4+8 = 13;
注意:任何数的0次方都是1。
二进制中的原码、反码、补码
对于有符号数而言:
(1)二进制的最高位是符号位:0表示正数,1表示负数
(2)正数的原码、反码、补码都一样;
(3)负数的反码 = 它的原码符号位不变,其他位取反(0 -1 ; 1-0 );
(4)负数的补码 = 它的反码 +1;
(5)0的反码、补码都是0;
(6)在计算机运算的时候,都是以补码的方式来运算的;
例子:
下面我们就使用“有符号数”来模拟一下,在计算机中是怎样运算的。
(1)正数相加:
例如:1+1 ,在计算机中运算如下:
1的原码为:
00000000 00000000 00000000 00000001
因为“正数的原码、反码、补码都一样”,所以,1的补码 = 1的原码,所以 1的补码+ 1的补码 就等于:
00000000 00000000 00000000 00000001
+
00000000 00000000 00000000 00000001
=
00000000 00000000 00000000 00000010
00000000 00000000 00000000 00000010( 转换为10进制) = 0*2^0 + 1*2^1 = 0 + 2 =2
(2)正数相减:
例如:1-2,在计算机中运算如下:
在计算机中减运算其实是作为加运算来操作的,所以,1-2 = 1 + ( -2 )
第一步:把 1补码找出来(因为正数的原码、反码、补码都一样,所以我们可通过原码直接获取补码):
1的补码:
00000000 00000000 00000000 00000001
第二步:把-2的原码找出来:
-2的原码:
10000000 00000000 00000000 00000010
第三步:把-2的反码找出来:
-2的反码:
11111111 11111111 11111111 11111101
第三步:把-2的补码找出来:
-2的补码:
11111111 11111111 11111111 11111110
第四步:1的补码与-2的补码相加:
00000000 00000000 00000000 00000001
+
11111111 11111111 11111111 11111110
=
11111111 11111111 11111111 11111111
第五步:将计算结果的补码转换为原码,反其道而行之即可(如果想将二进制转换为十进制,必须得到二进制的原码)
补码:11111111 11111111 11111111 11111111
=
反码:11111111 11111111 11111111 11111110
=
原码:10000000 00000000 00000000 00000001
第六步:将计算结果的二进制原码 转换 为十进制
二进制原码:10000000 00000000 00000000 00000001 = 1*2^0 = -1
二进制数原码反码补码计算、、、
‘反码’ 本人认为就是一个互换原理 :如 -7的8b 用二进制表示为00000111b。 在00000111b
中把5个‘零’互换成1.而3个1互换成‘零’就可得到00000111b的反码11111000b;
“原码”00000111b最高位(N-1)置为1.得原码为10000111b。而补码 是在 反码 的基础上加1得到00000111b的补码为11111001b
二进制中的反码、补码、原码是什么?
电脑只认识0和1所以都是用的二进制
所以,比如:
2
的原码
0010
(前面是都是0,省略)
反码
1101
(
就是把0与1反过来啊,
注意前面的0
都是1,全部反)
至于补码,
这就是要讨论的数值溢出,
因为位数太大,
我只先8位来说明明:
8位的最大数是:
0111
1111
再加1的话,会变成
1000
0000
这个就是负数了(1开头为负)
比如:127
+1
就会变成
-128
再+1
=
-127
一直加到127
法:首先分析两个十进制数的运算:78-38=41,79+62=141如果使用两位数的运算器,做79+62时,多余的100因为超出了运算器两位数的范围而自动丢弃,这样在做78-38的减法时,用79+62的加法同样可以得到正确结果。模是批一个计量系统的测
11111111 = 反码:11111111 11111111 11111111 11111110