关于 原码 反码 与 补码

今天做leetcode 405. Convert a Number to Hexadecimal

要求把一个数转化成二进制十六进制,是补码形式的

正数的时候很容易,但到了负数就有点懵逼了.

然后恶补了一下原码 反码 补码 的知识,成功解题

1. 原码

所谓原码就是符号位加上数字的二进制表示,int为例,第一位表示符号 (0正数 1负数)简单期间一个字节表示

+7的原码为: 00000111
-7的原码为: 10000111

对于原码来说,绝对值相等的正数和负数只有符号位不同。

所谓原码就是符号位加上数字的二进制表示,int为例,第一位表示符号 (0正数 1负数)简单期间一个字节表示

+7的原码为: 00000111
-7的原码为: 10000111

对于原码来说,绝对值相等的正数和负数只有符号位不同。

所谓原码就是符号位加上数字的二进制表示,int为例,第一位表示符号 (0正数 1负数)简单期间一个字节表示

+7的原码为: 00000111
-7的原码为: 10000111

对于原码来说,绝对值相等的正数和负数只有符号位不同。

2. 反码

一个数如果为正,则它的反码与原码相同;一个数如果为负,则符号位为1,(符号位不变化,其余位数取反)。

换言之 该数的绝对值取反(绝对值取反各位都取反)。
为了简单起见,我们用1个字节来表示一个整数:
+7的反码为:00000111
-7的反码为: 11111000

3. 补码

补码:一个数如果为正,则它的原码、反码、补码相同;一个数如果为负,去到反码然后加1。(反码加1就是补码)为了简单起见,我们用1个字节来表示一个整数:
+7的补码为: 00000111
-7的补码为: 11111001

4. 总结

所谓反码补码都是相对于原码而言的

正数:它的原码、反码、补码相同。

负数:反码符号位不变化,其余位数取反,补码符号位不变化其余各位原码取反(反码)+1换言之 反码+1

5.其他

我在学习的时候就有一个疑问,为什么正数的反码和补码就是本身呢.

由于反码和补码的出现本身就是为了方便运算,计算机底层硬件无法做减法,所以就设计出补码将原码取反加1
也就是将 原来的a+b 转换成 a+(-b)

对于本身就是正数,直接丢到机器做运算就可以了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值