搞懂计算机中原码、反码、补码,仅需这一篇就够了!!!

各位看官们你们好呀,欢迎来到leobatch,学习使我们相遇,很高兴认识你们。

这一期呀,我们来探讨一下计算机语言中的三码:原码、补码和反码,这三码到底是怎么一回事呢,我给您细细道来......

一、对这三码的初步认识

我第一次了解这个概念是大一学数电的时候,知道计算机在存储数据是都是以二进制数存储的,也就是0101010101的随机排列分布,正因为这点,我们才有了原码、反码、补码的定义。规定中是这样说的,一个正数,它的原码反码补码是一样的;一个负数,原码有符号位,也就是最高位,最高位是1表示是负数,而负数在计算机中存储时是以补码存储,以原码输出。那补码要怎么求呢?很简单,在写出原码后,符号位不变,然后把剩下的都按位取反,再加1就是该数的补码。

比如说,-1,它的原码是10000001,反码就是最高位的符号位1不变,其他位取反,即11111110,补码就是在反码的基础上加1,即11111111。

二、C语言中对这三码的应用

比如有这样一段代码

int   main()

{

char a = 3,b = 127;

char c = a+b;

printf("%d\n",c);

return 0;
}

您觉得c是多少呢?130?并不是,我来分析一下这段代码。

我们都知道,char在空间中只占1个字节,也就是8个bit位,char a = 3,在内存中是这样存的,

00000011,同理,char b = 127是这样存的,01111111。

当 c = a + b 时,整型提升(最高位是0全补0,最高位是1全补1),是这样算的。

     00000000000000000000000000000011

+  000000000000000000000000001111111

=  00000000000000000000000010000010

然后截断,取后八位,即,c = 10000010,输出时%d输出,所以,要继续整型提升(最高位是0全补0,最高位是1全补1):

11111111111111111111111110000010  ---  补码

11111111111111111111111110000001  ---  反码

10000000000000000000000001111110  ---  原码(符号位不变,其余位取反),输出为 -126。

所以,正确答案是c = - 126。

以上就是本期的全部内容了,能够与您分享知识是我最大的荣幸!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

leobatch

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值