原码,反码,补码

大家都知道计算机都是以二进制存储的,也就是计算机只认识01.但是01也是有身份的好不。

那么今天我们就来看看01都有什么身份。

在计算机里都是以补码的形式存储数据!哎,补码就是01的一个身份标识。

返回来,计算机张口说话了,它说,小伙子,我给你一个补码,你看看认识这是啥吗?

因为计算机只认识补码

        为什么计算机要以补码形式存储呢?为啥不用中文存储呢,因为我是中国人啊!很好,就要有提问的精神,先不管提的问题靠不靠谱。

因为cpu里有加法器,会进行加法计算。没有减法器哦。

那么如果要计算5-5怎么计算的呢?转换一下5+(-5),嘿嘿,哎呦我的小聪明!

5的原码00000101

-5的原码10000101

把两个二进制相加=10001010  ,最高位1是负数。剩下7位表示 10 。最后结果是-10;错误。不能通过原码计算

5的反码00000101

-5的反码11111010

把两个二进制相加=111111111  得到的是反码,因为我们人只知道原码,再把反码转成原码=100000000 。最高位1是负数。其他位得到0 结果是-0.哎呀,是对的啊。但是

00000000这个也表示0啊(只是第一位是符号位)。100000000也表示0啊(只是第一位是符号位)。不能用不同的二进制表示同一个数值。

5的补码00000101

-5的补码11111011

把两个二进制相加=100000000,8个位已经存不下了1跑到了第9位。但是一个字节占8位。要截取掉。得到00000000.所以结果得0

人只认识原码

一个字节占8位

一个整数占4字节,一个字符占1个字节。

原码最高位为符号位:0表示正数,1表示负数。非符号位为该数字绝对值的二进制。

5的二进制原码 00000101

-5的二进制原码 10000101

反码:

        正数的 反码与源码一直

        负数的反码是对源码按位取反,最高位的符号位不变。

5的反码:00000101

-5的反码:11111010

补码存在的意义是什么?(单片机读取传感器的数据是补码形式的)

        正数的 补码与源码一直

        负数的补码与该数的反码加1

5的补码:00000101

-5的补码:11111011

以上是正向转换

下面是反向转换,

举例1:单片机采集到了补码数据:00000101,最高位是0为可以知道是正数

那么正数的补码和源码一致。原码也是00000101 = 5;

那么如果是负数的补码:1000 0010

1000 0010变成反码,+1,高位不变 1000 0011这是反码

而1000 0011反码的源码 ,按位取反,高位不变  1111 1100 = 

举例2:单片机采集到了补码数据:11111011,最高位是1为可以知道是负数

先得到反码,

反码=补码-1  -> 11111011-1=11111010

原码=反码按位置取反,符号位不变 -> 10000101 。最高位是1表示是负数。0101是5

最后结果为-5;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值