原码、反码、补码与移码详解

        在计算机系统中,原码、反码、补码与移码是用来做什么的?分别又有什么作用?它们为什么会出现?下面通过这篇文章,咱们就来谈谈四码的相关知识点。

目录

1、原码、反码、补码与移码的表示同一数字的形式是怎样的?

2、为什么需要这些码?


1、原码、反码、补码与移码的表示同一数字的形式是怎样的?

        原码:是最直接的表达方式,亦是编程人员最为直观接触的方式,其最高位表是符号位,即最高位0表示正数、1表示负数。

        反码:主要是为了方便计算机做减法运算而存在,因为计算机做加法运算比减法运算更为容易。正数的反码=原码、负数的反码书除符号位外的值取反(0变1、1变0).

        补码:是目前计算机系统中最常用来表示有符号整数的方法,可以将加法和减法统一处理,并且避免了加法中的进位丢失问题。正数的补码=原码、负数的补码是其原码的反码加1。

        移码:是补码的一种变形,通常用于表示浮点数的阶码(此处可能打架还未接触过,不过没关系,作者会在后续的章节补充基于IE754的浮点数与二进制和十进制的解析。浮点数的解析是很有意思的,以前在迪子承担工程师时就针对此问题做了实际分析与应用)。移码是将补码的每一位数值位加1。

下表是实例:

编码类型 10 -10
原码 01010 11010
反码 01010 10101
补码 01010 10110
移码 11010 00110

2、为什么需要这些码?

        解:刚才在上面已经说过了,是为了方便计算机更容易进行运算。

        如:

                原码:直观、简单

                反码:

                        简化减法:在计算机中,加法比减法更容易实现,所以使用加法器进行减法运算。

                                如:2-3 = 0010-0011

                                反码转换:0010 + 1100 = 1110 = -1

                        避免0的两种表示:在反码表中,0的表达式只有全0,而原码有+0与-0。

                补码:

                        简化硬件:减法与加法共用一个加法器实现。

                        避免进位丢失:在补码运算中,最高位的进位是可以被忽略的。因为它是由于符号位产生的,如此便不会丢失真正的数值信息。

                        统一表示:补码系统中加法与减法运算操作是一致的。

                        范围对称:在补码系统中,负数与正数的范围是对称的。如:8位补码,可表示的范围是-128~127。

                移码:

                        简化比较:在浮点数表示中,使指数部分的比较变得更加简单,因为移码本质上就是一个无符号数。

                        避免负0:使用移码表示指数不会出现负零的情况,更加简化了浮点数的比较和处理。

                        提高效率:在浮点运算中,移码可以更加高效的实现指数的加减运算。

                        对浮点数感兴趣的朋友,可以持续关注作者后续文章,将分出两章讲解浮点数的表示形式以及精度与舍入等基于IEEE754的标准。(为方便大家一目了然,最近作者会梳理这部分知识点,尽量用大白话讲明白)。

                        

        以上便是关于原码、反码、补码与移码存在的意义,相信读了这篇文章后,大家对计算机更加熟悉,后续我们会逐渐刨析计算机内部原理与实现方式。计算机其实就是一个傻瓜。

你可能感兴趣的:(单片机,mcu,c语言,嵌入式硬件)