机器数及其真值,原码、反码、补码、移码

目录

目录

写给读者的话:

一、机器数及其真值

1、真值

2、机器数

计算机中机器数的结构

二、原码、反码、补码、移码

1、原码

2、反码

  反码的编码规则:     

3、补码

补码的编码规则:

4、移码

三、补码的运算         


写给读者的话:

       为什么要研究机器内部的数据表示?其中的一个原因或者说目的就是要方便硬件对数据的识别和处理。

       那么机器内部的数据如何来表示呢?主要考虑以下几个维度: ①机器所需要支持的数据类型有哪些?(这个和机器研究时候的应用的定位有关) ②机器内部需要表示的数据的范围是多大(这个也和机器研究时候的应用定位有关) ③机器能够表示的数据的精确度  ④数据在机器中的存储和处理的代价(是否有利于运算器设计的优化和简化) ⑤是否有利于软件的移植...

       就像各位小伙伴在学习C语言的时候,数据类型不也是分为整型、浮点型和字符型吗,有时候数据的输出也会碰到范围和精度的问题,还有其中的指针不也是与存储相关吗,对吧。

       为何要引入原码、反码和补码?因为计算机用机器数进行运算的时候,会产生错误的结果。

一、机器数及其真值

1、真值

       为啥要先讲真值这个概念呢?那还用说,因为方便等会引出机器数的概念啊!

       何为真值? 

       就是用二进制表示的数它的正负号就直接用“+” 、“﹣”号来表示。

       例如:(-44)10,它的真值就是(-00101100)2      

       注:其中斜体的10和2分别表示这是十进制数和这是二进制数,下文通通默认斜体的阿拉伯数字皆代表几进制。

2、机器数

       还记得刚才讲的真值吗?

       机器数就是把正负号数字化,即正号用“0”来表示,负号用“1”来表示。

计算机中机器数的结构

(假定字长为8。字长就是机器中的CPU进行一次整数运算所能够处理的二进制数据的位数,例如,现在的所说的64位就是表示该机器的处理器(CPU)进行一次整数运算所能够处理的二进制数的位数为64。注:下文皆默认字长为8

                      还记得(-44)10吗,它的真值就是(-00101100)2  ,机器数为10101100
 

二、原码、反码、补码、移码

1、原码

       原码和机器数就长一样的,十进制数X的 原码记为[X]原。

       例如:

                     [+1]原 = 00000001                            [-1]原 = 10000001

                     [+65]原 = 01000001                          [-65]原 = 11000001

 0的原码有2个:                    [+0]原 = 00000000                            [-0]原 = 10000000 

2、反码

       反码是为了求补码而设计的一种过渡编码。十进制数X的反码记作[X]反。

  反码的编码规则:     

       ①正数的反码等于原码

       ②负数的反码是在原码的基础上,符号位不变,其余各位按位取反,即0变1、1变0。

注:苯宝宝的小口诀:正取原,负取反,符不变。

例如:

                     [+1]反 = 00000001                            [-1]反 = 10000001

                     [+65]反 = 01000001                          [-65]反 = 10111110

0的反码有2个:                    [+0]反 = 00000000                            [-0]反 = 11111111                    

3、补码

十进制数X的补码记作[X]补

补码的编码规则:

          ①正数的补码与原码、反码一致

          ②负数的补码是将其反码的末位加1。

注:苯宝宝的小口诀:正取原,负加一。

例如:

                     [+1]补 = 00000001                            [-1]补 = 11111111

                     [+65]补 = 01000001                          [-65]补 = 10111111

0的反码只有1个:                    [+0]补 = [-0]补 = 00000000       

4、移码

       定义:除了常用的原码、反码、补码之外,还有一种码制叫做移码。所谓移码,就是在真值 X 上增加一个偏移量来定义的,通常用来表示浮点数的阶码。

       表示形式:其表示形式类似于补码,只是其符号位用 1  来表示正数,0 来表示负数,则数值表示部分则是与补码相同。
 

注:移码是个很偏的知识点了,了解一下就可以了。

三、补码的运算         

      ①符号位也如同数值一样参与运算(注;注意数值的溢出)

      ②减法运算可转换为加法运算([x + y]补 = [x]补 + [y]补, [x - y]补 = [x]补 + [-y]补)

例如:

       

                                    

             

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值