700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 原码 反码 补码二进制表示

原码 反码 补码二进制表示

时间:2020-02-06 11:41:47

相关推荐

原码 反码 补码二进制表示

学习目标

1、什么是二进制,谈谈你的理解

2、什么是原码,补码以及反码

二进制:0和1组成的数字系列,逢二进一。对于计算机而言,只认识0和1,数据在计算机的存储都是以二进制的形式存储。

原码,反码,补码,都是计算机用二进制来表示数据的,计算机表示数据是由数据长度和符号位表示的,首位表示符号位,0表示正数,1表示负数,剩下的数据表示所要表示的数据。

什么是数据长度?

就是我们说的位数,例如,byte类型的数据长度是8,符号位占首位,数值位占7位。

原码

原码(true form)是一种计算机中对数字的二进制定点表示方法。原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1(0有两种表示:+0和-0),其余位表示数值的大小。

原码的优点

简单直观;例如,我们用8位二进制表示一个数,+11的原码为00001011,-11的原码就是10001011

原码的缺点

正数与负数的加法运算会出错,例如

1+ (-1)=-2

0001 +1001=1010

反码

首位是符号位,0表示正数,如果表示负数,则全部数据长度按照正数的表示按位取反。

补码

补码是为了弥补原码和反码对于0整个数字二义性而出现的。我们以8位来表示数据。

原码:

反码:

从上,可以看到对于0,原码和反码都出现了两种表示,违反的数据唯一性的基本条件。所以我们需要有一种表示方法,对于0,只能用0000 0000这一种表示。解决了0这个唯一性的问题,对于正数和负数就能用唯一的表示。

我们拿2+ (-2)=0。来推理

2用0000 0010表示,-2怎么表示呢?除了首位是1,我们可以确定外,其他的我们一无所知。

这样1111 1110就可以表示-2,但是有个问题,

我们可以看到上述相加变成了9位数据长度。1 0000 0000 。上面我们说了,数据表示是规定了数据长度的。超出的这个最高位1会被舍弃。所以我们上面的表示是没有任何问题的。

解决了这个唯一性问题,计算机就可以以补码的形式存储数据了。事实计算机也都是以补码的形式存储数据的。

举例

下面我们再以十进制-5到5看下规律,数据长度为8位

总结

从上我们可以看出,

原码,反码,补码正数表示都相同。

原码,反码对于数字0有两种表示,补码只有一种,

对于负数,原码,补码,反码表示不同,补码=反码+1。

延伸

对于计算机二进制表示数据,是不连续的,即二进制表示不了所有的正数,负数,例如对于无理数,无线循环小数是不能用二进制精确表示的,1/3,用二进制就没法表示,0.1用二进制也没法表示,√2用二进制也无法表示。所以也就有了计算精度这一概念。

byte a = ( byte)130值为何是-126?

计算机是以二进制补码来存储数据,但是展现在控制台是给人看的,给人看就需要符合人的理解思维方式,最符合人的理解思维方式就是原码。

我们以32位计算机系统为例,130的补码:

‭00000000 00000000 00000000 10000010‬‬

强转后: 保留8位

补码: 1000 0010 ,表示负数,对应反码需要-1

反码: 100000001,表示负数,对应原码除了符号位全部取反,

原码: 11111110

这个原码对应真值十进制数就是-126。

自我拓展

为什么会有0.1+0.2不等于0.3的问题?

出现这个情况的根本原因是因为计算机是二进制文件处理数据,我们知道数学数据类型有有理数、无理数、虚数。计算机只能处理二进制。所以对于无理数、分数、有限循环小数计算机是没办法进行二进制表示的。即使是有理数,计算机也很难用二进制全部表示。例如有理数,小数0.1。

十进制小数转成二进制小数的原理:

十进制小数转换成二进制小数采用"乘2取整,顺序排列"法。具体做法是:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数 部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止。

然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。

按照上述规则:对0.1进行二进制表示0.0001100110011...。0011会无限循环下去。你看计算机存储数据弱爆了。连个0.1都表达不了。这样就导致其进行数据计算时,存在精度丢失的情况。也就是我们常见的0.1+0.2

0.3。

十进制整数转换成二进制

十进制整数转换为二进制整数采用"除2取余,逆序排列"法。具体做法是:用2去除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为零时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。即运算结果逆序排序

10.1 的二进制表示

整数部分按照整数部分二进制表示,小数部分按照小数规则表示,然后把整数部分和小数部分合并起来。

10.1的二进制表示为1010.0001100110011....。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。