原码、反码、补码、移码超级无敌清楚的讲解

计算机中的数据可以分为:数值数据、非数值数据;
数值数据可以分为:有符号数据、无符号数据;
非数值数据包含:文字、视频、图像…

以8位(一个字节)的数据为例:
有符号数据的表示范围为:-(2的n-1次方)-1到2的n-1次方;
无符号数据的表示范围为0到2的n-1次方

无符号数据与原码、反码、补码的关系:
无符号数全是正数,原码就是该正整数的二进制表示方法;
无符号整数的原码=反码=补码;

有符号数与原码、反码、补码的关系
(正整数的原码=反码=补码)
原码:

有符号数据中的正整数的原码就是该数的二进制数,如:2用八位二进制
表示为00000010

有符号数据中的负整数的原码就是正整数的原码的最高位(符号位)为1,
其他位不变,如-2的原码用八位来表示为10000010

反码:

有符号负整数的反码就是在原码的基础上,符号位(最高位)不变,保
持为1,其余位按位取反(也就是原来为1的位变成0,原来位0的位变为1),
-2的反码就是11111101

补码:

有符号数的补码就是在原码的基础上,符号位不变,其余位按位取反,
最后在最低位加一,-2的补码就是11111110

为什么会有原码、反码、补码呢?
计算机中的数都是用补码的形式存储的;

也就是正数在计算机中的存储方式就是补码(正数的原码=反码=补码);

负数在计算机中的存储方式也是补码(负数的原码、反码、补码规则在上面);

私以为原码、反码毫无卵用,有用的只是补码,因为负数的二进制并不那么记,也不好推算,所以制定了原码、反码的概念,方便从正数的二进制数推算除负数在计算机中的二进制数,为什么这样说呢?下面我以一张图解释。

这张图依然以八位二进制来解释
在这里插入图片描述
右边那一半就是正数的二进制表示,也是其原码、反码、补码;

左边那一半就是负数的补码形式,有没有发现左边的数就是右边的数按位取反;-1的补码就是0的二进制取反,-128的补码就是127的二进制取反;

而且127的二进制+1就是-127的补码,很神奇对不对,好像经历了一个轮回。计算机中只有一个加法运算器,没有减法运算器,也没有乘除法运算器。

移码:
移码和补码的表示范围一样,只不过移码使用1表示正,0表示负

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值