数字电子技术基础(三)——二进制的原码、补码、反码以及几种常见的编码

目录

1  无符号数和有符号数

1.1 无符号数

1.2 有符号数

2 计算机科学中的三种表示方法

2.1 原码

2.2 反码

2.3 补码

3 加减运算的简单介绍

3.1 二进制加法

3.2 二进制减法

4 几种常见的编码

4.1 固定长度的编码

4.1.1 BCD码

4.1.2 余三码

4.1.3 2421码

4.1.4 5211码

4.1.5 余3循环码

4.1.6 格雷码

4.2 变长编码


1  无符号数和有符号数

无符号数和有符号数是计算机编程中两种常见的数据类型。它们在存储方式、溢出方式有所不同。

1.1 无符号数

无符号数即所有位置都是用于表示数值本身。

对于一个N位的无符号数,其能够表示的范围为0\sim 2^N-1。例如一个8位的二进制数,其数值表示范围为0~255,其中0的二进制形式为00000000,而255是11111111。

当存储大于超过本身范围的数的时候,无符号数会发生溢出行为并且循环到最小值,例如八进制数存储256时,会循环到0;如果要存储514时,会循环到2;

1.2 有符号数

有符号数不仅有数值位还有符号位,一般有符号数的符号位是这个数的最高位,其他位是数值位。正数的符号位一般为0,负数的符号位一般为1。

对于一个N位的二进数有符号数,其能够表示的范围是-2^{N-1}\sim 2^{N-1}-1

一个8位的有符号数,其数值表示的范围是-128~127。对于正数的有符号数,范围是00000000-01111111,即0~127;对于负数的有符号数,用10000001-11111111分别对-1到-128,用10000000来表示-128。

2 计算机科学中的三种表示方法

在计算机科学种有三种常见的表示方法,分别是:原码、反码和补码。原码是一种最直观的表示方法,直接用二进制表示一个数;反码主要是用于表示负数,正数的反码和原码相同。补码是计算机种进行计算操作最常用的表示方法,对于正数来说,其补码就是原码,对于负数来说,补码是反码加1。

2.1 原码

二进制正数的原码就是它本身,负数的原码也是其本身。

在8位二进制表示中,-128原码是一个特殊情况,-128的原码是用补码来表示的,它的补码为10000000,因此8为有符号能够表示的范围是-128~127。

2.2 反码

二进制正数的反码为它本身。二进制负数的反码为其符号位不变,数值位中的0变为1,1变为0。

例如,对于±31,其中31的原码为00011111,-31的原码为10011111。将其转换为对应的反码如下所示:

图1 原码转换为反码

原码变为反码的规律可以对任何数都是使用,比如0的原码00000000,反码00000000;24的原码00011000,反码00011000;-24的原码10011000,反码11100111;-29的原码10011101,反码11100010; -128的原码00000000,反码11111111。

2.3 补码

对于正数来说,其补码就是它的原码。而对于负数,它的补码为其反码加1。

例如,对于±31的8位二进制数来说,其原码是00011111,反码为00011111,补码为00011111;-31的原码为10011111,反码为111000000,补码为11100001;转换过程如下所示:

图2 原码转换为反码和补码

 8进制二进制有一种特殊情况是-128,它的原码是10000000,补码也是10000000。

图3 -128的原码转化为反码和补码

3 加减运算的简单介绍

3.1 二进制加法

对于二进制数,可以对其进行加减运算。在进行加减运算的时候,我们一般将其转换为补码进行运算。

例如两个6位二进制数010010和001010进行加法运算(最高位为符号位,对应的十进制数为18和10),相应的补码也是010010和001010,相加过程如下所示:

图4 两个二进制正数相加

可以看到通过计算得到011100,对应的原码为011100,十进制结果为28,和直接十进制相加所得的结果相同。

同时可以进行正数与负数进行相加,例如有符号的二进制数010111和101111(对应十进制的23和-15)相加,将负数转换为对应的补码为110001。计算过程如下所示:

图5 二进制正数和负数相加

可以看到最终结果为001000即十进制数8,通过比较十进制数结果可知计算正确。

当两个有符号数之和大于超过表示的范围的时候,会出现溢出现象(Over

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每月一号准时摆烂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值