一文搞清原码,反码,补码及其应用

“三码”之间的转换

注意:以下的分析均以 1字节 进行

正数负数
原码数据的二进制形式数据的二进制形式
反码等于原码原码的符号位不变,其他位取反
补码等于原码负数的反码“+1”

注意:无符号数,正数,它们的 原码=反码=补码
负数: 反码=原码的符号位不变,其他位取反
补码:反码+1.

重要:负数在计算机中存储的是补码。

计算机中为啥要用补码呢?

  • 1,将减法运算变为加法运算:

就拿6-10==-4来举个例子:
如果没有补码,则计算如下:
6 + (-10) = -4
0000 0110
+1000 1010
--------------------
1001 0000 = -16 (则计算结果错误)

如果有补码:
0000 0110
1111 0110(- 10的补码)
-----------------
1111 1100(-4的补码)——>1000 0011——>1000 0100== -4

在上述补码的计算中我们也可以得出一个负数由补码到原码的计算方法:“原码 = 补码取反+1”

  • 2,统一了 “0” 的编码 :
    +0 == 0000 0000 == 0000 0000(反码)== 0000 0000(补码)
    -0 == 1000 0000 == 1111 1111(反码) == 0000 0000 (补码)

计算机对数据的存储与读取

  • 有符号取(%d,%hd,%ld)

首先看内存的最高位,如果最高位为1,则将内存数据的符号位不变,取反+1到原码;如果最高位是0 ,将数据原样输出。

  • 无符号取(%u,%x,%o,%lu)

将内存数据原样输出

小结
  • %x,%u,%o都是输出内存的原始数据
  • 十六进制是以原码存储的
  • 每四位二进制代表一位十六进制
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

阔升

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

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

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

打赏作者

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

抵扣说明:

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

余额充值