C语言原码、反码与补码

初学者很容易把这三种码搞混,主要是记不清楚它们三个的定义,这里给出大家明确的定义,方便以后复习。


我们从正数和负数两方面来学习,但我们得先知道二进制数的首位表示的是这个数的正负,也就是符号位最高位为1,表示为负数,最高位为0,则说明这个数为正数。


目录

1.正数原码、反码、补码

2.负数原码、反码、补码

3.原码、反码、补码的相互转换

4.原码、反码、补码的表现形式


1.正数原码、反码、补码

正数其实很简单,正数的原码、反码、补码都是相同的

原码=反码=补码:把一个正数直接写出它的二进制表示形式得到的就是这个数的原码。

这里我们可以看一个例子:比如数字2,它的

原码:00000000 00000000 00000000 00000010

反码:00000000 00000000 00000000 00000010

补码:00000000 00000000 00000000 00000010

2.负数原码、反码、补码

负数就有说法了,三种码的定义分别是

原码:把一个负数直接写出它的二进制表示形式得到的就是这个数的原码,但是符号位要改             为1;

反码:原码除符号位以外,其余位按位取反;

补码:反码+1;

我们看哪个例子:比如数字-2,它的

原码:10000000 00000000 00000000 00000010

反码:11111111  11111111  11111111 11111101

补码:11111111  11111111  11111111 11111110

3.原码、反码、补码的相互转换

正数的原码、反码、补码相同,不需要我们转换,我们这里只需要学习负数的转换。

负数

按照上面负数三种码的定义是一种正向转换,我们也需要知道如何从补码转换到反码转换到原码。有两种转换方式。

1.把补码-1得到反码,再把得到的反码除符号位以外所有位按位取反得到原码;

2.补码除符号位按位取反在+1直接得到原码;

用图来描述就是这样:

4.原码、反码、补码的表现形式

内存中存储的起始是补码的二进制,在参与移位时,移动的都是补码;也就是说只要是整数内存中存储的是二进制的补码;

在给我们显示时打印出的都是原码,按原码来变幻成各种进制的值,我们一般都是十进制。

简单来说就是:打印原码,存储补码。反码一般用不到,在那种专门考察题中会遇到。

例如:我们有个数需要打印,由反码转换过来的                                                                       原码是    10000000 00000000 00000000 00000011,我们编译器最终输出的就是 -3。


差不多就是这些了,希望对大家有所帮助!!!

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

月亮夹馍干

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

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

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

打赏作者

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

抵扣说明:

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

余额充值