当前位置:网站首页>学习笔记:原码, 反码, 补码
学习笔记:原码, 反码, 补码
2022-07-26 01:33:00 【笑虾】
作为一个程序员,始终要坚持一个信念,那就是 省屁吹灯,这也是一切的源头。
- CPU做加法运算最快。
- 尽量将减法运算转换成加法进行计算。
- 二进制表示数值时,最高是符号位,如果计算时要先判断符号再算,就复杂了。思路,让符号一起参与计算(像正常的加法一样)
原码
- 以
8位二进制来表示一个数字为例。最左边的第1位作为符号位,还剩下后7位可以用来表示值。
1.1.正数符号位为:0:如: 1 的二进制为 00000001
1.2.负数符号位为:1:如:-1 的二进制为 10000001 正数的原码 = 反码 = 补码。所以我们在讨论反码, 补码时主要是说负数。- 之所以发明出
反码, 补码就是为了让负数的二进制运算,和正数保持相同的运算规则(让符号位参与计算并且将减法转成加法进行),最后还能得到我们想要的正确结果。
反码
- 正数:强调前面已经说过了
正数的原码、反码、补码都一样。 - 负数:
符号位不变,其余各个位取反。
2.1.-1原码:1000 0001
2.2.-1补码:1111 1110 (放在256大环中看此值为254离补数还差1) - 使用
反码如愿让符号位也参与计算了,但还有两个问题:
3.1. 我们得到的结果比真实结果少1.
3.2. 存一个尴尬的负0问题:1000 0000
补码
- 正数:再次强调前面已经说过了
正数的原码、反码、补码都一样。 - 负数:在
反码基础上+1。补上了反码运算少的1,并使得正负0的补码相同,解决了-0问题。-0原码:1000 0000-0反码:1111 1111 (当作原码解析此值为255)-0补码:0000 0000 等于+0= 0000 0000 (符号位溢出,又变回了正数) - 人为定义1000 0000 为
-128,以至于我们看到的取值范围负数会比正数多一位:[-128, 127]
原理
以时钟为例,当前时针指向6点,如果想将其调整为3点,可以有两个方案:
- 顺时针调:
+9即6+9=3。 - 逆时针调:
-3即6-3=3。转为等价的加法:6+(12-3)
成功将减法-3替换为+9结果相同。因为它俩在一个12的闭环当中,互为补数。
我们的补码也是同理。 0000 0000 这8位二进制数就是一个256的大环。(最大值为255再加1到256就是下一圈的0了,就如同没有今夜的24点,只有明天的0点)
例:在256的圆环中,向后-1 等于向前 +255。
(+255 是 -1 以256 为模的补数 )-1 原码:1000 0001-1 反码:1111 1110 (放在256大环中看此值为 254离补数255还差1 )-1 补码:1111 1111。在反码之上 +1 正好 +255。
结论:减去一个数,等于加上这个数的补码。因为补码计算的便利性,所以计算机中实际存储的是补码。
参考资料
边栏推荐
- Arthas watch 命令查看数组中对象的属性
- 3059. 雕塑(jzoj)
- Zero copy of network file transfer
- MulDA: A Multilingual Data Augmentation Framework for Low-Resource Cross-Lingual NER 阅读笔记
- "Weilai Cup" 2022 Niuke summer multi school training camp 2 i.[let fat tension] matrix multiplication j.[link with arithmetic progression] linear regression
- [software development specification II] prohibited item development specification
- PtGui pro12 vertical line correction
- poj1521
- 格式化JS代码,调试JS代码
- 两阶段提交和三阶段提交
猜你喜欢

Tencent employees' salary: the real 985 graduation salary, do you think I can be saved? Netizen: daily salary?

Kubernetes pod start process

Leetcode537. Complex multiplication (yes, solved)

Linked list related interview questions

Basic version of Google browser debugging tool (I)

Two stage submission and three stage submission

Prime Ring Problem

NIO简易示例
![[data mining] differences, advantages and disadvantages between generative model and discriminant model](/img/a4/3dba2ba9fa0fe3062f17aea2bfae47.png)
[data mining] differences, advantages and disadvantages between generative model and discriminant model

Fastjason handles generics
随机推荐
言语理解中心理解总结
[software development specification II] prohibited item development specification
"Weilai Cup" 2022 Niuke summer multi school training camp 2 k.[link with bracket sequence i] bracket sequence DP
Tutorial on principles and applications of database system (053) -- MySQL query (XV): usage of character functions
EasyRecovery15下载量高的恢复率高的数据恢复软件
Google gson usage details
Handler message mechanism - FWK layer
“蔚来杯“2022牛客暑期多校训练营2 H.[Take the Elevator] 维护线段
zeromq浅析
C语言进阶(一)动态分配内存
Advanced C language (I) dynamic memory allocation
PyCharm在创建py文件时自动添加头部注释
点屏注意事项
Arthas watch command to view the properties of objects in the array
MDK compilation process and arm compilation tool chain
01. MySQL transaction isolation level and concurrent database access
[software development specification III] [software version naming Specification]
Is it safe to buy funds on e fund? Professional answers
C language enumeration types and unions
8. Learn Mysql to create data tables