机器数的原码、反码和补码

机器数的原码、反码和补码

    机器数是计算机中使用的数分为有符号数和无符号数,我们通常所说的数在计算机中是一个字节,即8位二进制数。
    计算机中无符号数没有原码、反码和补码。因为, 无符号数在计算机中直接将数字化成二进制然后存储在对应的存储器或者寄存器中。 这时寄存器或者存储器的位数就可以表示数值的范围,通常情况下如果是 8 位的, 表示的范围为 0 ~ 255。它的原码、反码和补码是一样的。

有符号数:
即有符号的数, 符号数存储时不仅要将数据部分存入计算机, 还要将符号存进去。正数的原码、反码和补码相同;负数的原码、反码和补码不同。
这里介绍的原码、反码和补码主要是针对有符号的数。

无符号数

   无符号数它没有正负之分, 一个数占一个字节,8位二进制,则这8位二进制都可以表示数字的取值,所以它的取值范围是0-255,其中最小的值是0000 0000 ;最大的取值范围是1111 1111。

符号数

 无符号数,它的数分为正数、负数和0,在计算机中用一个字节中的最高位代表符号位,其中“0”表示正号,“1”表示符号,如-1,在计算机中表示1000 0001;1,在计算机中的表示为0000 0001;

原码

原码是机器数的一种简单最简单的表示方法,在计算机中用二进制进行表示,其中第一位表示符号, 其余位表示数值. 比如
[+1]原 = 0000 0001

[-1]原 = 1000 0001

第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是:

[1111 1111 , 0111 1111]

[-127 , 127]

原码是人脑最容易理解和计算的表示方式.

反码

由于计算机只会加法不会减法,所以两个数的减法可以看成一个正数加一个负数,如果运算时将符号位和数据位隔开单独运算,运算规则是十分复杂的。为了让减法计算更简单我们希望在计算时连同符号位一起运算。于是便有了反码,
其表示方法是:正数的反码是其本身

负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.

[+1] = [00000001]原 = [00000001]反

[-1] = [10000001]原 = [11111110]反

补码

         1-1=【00000001】+【11111110】=【11111111】原码为【10000000】代表-0,如果用反码运算这里0产生两个结果,于是便有了补码。

1-1=【00000001】+【11111111】=【00000000】完美解决了上面的问题
可见如果一个反码表示的是负数, 人脑无法直观的看出来它的数值. 通常要将其转换成原码再计算。
我们都知道计算机中的负数是用补码来表示的,而负数的补码是原码符号位不变,其他位按位取反再加一。但是为什么必须这样?为什么非要取反再+1?这个定义是怎么来的?
在进行计算时10-9=1,被减数中的各位0不够9减向十位借1当十进行减,然后十位数值减1,但是在计算机中,运用借位比电路设计麻烦怎么办,就是用了补码进行计算,
用8位二进制代表一个数值,9转换二进制是0000 1001,而1111 1111减去0000 1001=1111 0110(0变1,1变0),然后加1 变成1111 0111 ,在加上10(0000 1010)就是二进制0000 0001,舍去最高位。因此,补码的作用就是简化电路,去除借位操作。
补码的范围是:
[+0] = [00000000]原 = [00000000]反 = [00000000]补

[-0] = [10000000]原 = [11111111]反 = [00000000]补
可得[-0]补=[+0]补,它可以表示的范围多处一位,我们增加到负数范围故是-128-+127;

溢出

在补码进行运算时,如果溢出则将溢出的数舍弃、不管

为了防止溢出,在符号位可以使用2位。

移码

移码即将补码符号位取反,一般用做浮点数的补码bai,引入的目的是为了保证浮点du数的机器零为全0。
如X=+1011 [X]移=11011 符号位“1”表示正号
X=-1011 [X]移=00101 符号位“0”表示负号

变补

计算机在进行计算时只能进行加运算,如果X-Y的补计算机怎么计算呢?
这里我们可以使用变补方法。即将X-Y的补变成:X补+(-Y)补
变补它是一种运算,不是一种码制。
变补的求法:
(-Y)补的求法是:Y补联通符号位一起取反,末位加“1”,即可得到(-Y)补。
(-Y)补=(Y)补的变补。

  • 7
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值