当前位置:网站首页>学习笔记:原码, 反码, 补码
学习笔记:原码, 反码, 补码
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。
结论:减去一个数,等于加上这个数的补码。因为补码计算的便利性,所以计算机中实际存储的是补码。
参考资料
边栏推荐
- [unity] random generation of two-dimensional cave map
- 3059. 雕塑(jzoj)
- Speech comprehension - structural analysis exercise of fragment reading
- Special topic of distributed micro service e-commerce (I) - Project Introduction
- 华为无线设备WDS配置命令
- 言语理解中心理解总结
- 服务器可用资源查询脚本
- Tutorial on principles and applications of database system (053) -- MySQL query (XV): usage of character functions
- U++学习笔记 UStruct、UEnum声明以及函数库简单函数实现
- “蔚来杯“2022牛客暑期多校训练营2 G.[Link with Monotonic Subsequence] 分块构造
猜你喜欢

Machine learning: Bayesian Networks

PyCharm在创建py文件时自动添加头部注释
![[go] III. The simplest restful API server](/img/1f/f6fc8cc9a3891d01a25e709170188d.png)
[go] III. The simplest restful API server

Introduction to API testing

SOC first project hello_ world

zeromq浅析

Fiddler5+ lightning simulator 4.0 settings for app packet capturing

NLP introduction + practice: Chapter 4: using pytorch to manually realize linear regression

Cross-lingual Transfer of Correlations between Parts of Speech and Gaze Features 阅读笔记

《分布式微服务电商》专题(一)-项目简介
随机推荐
Basic version of Google browser debugging tool (I)
Codeforces Round #810 (Div. 2)A~C
B - Krypton Factor (dfs+ backtracking method)
The sales volume has won the championship repeatedly. Is the secret of Wuling's success only low price?
Machine learning: Bayesian Networks
【数据挖掘】生成模型和判别模型的区别及优缺点
两阶段提交和三阶段提交
Integer data type in C language (do you really understand it)
Mulda: a multilingual data augmentation framework for low resource cross linguistic ner reading notes
言语理解中心理解总结
Two stage submission and three stage submission
PyCharm在创建py文件时自动添加头部注释
Cross linguistic transfer of correlations between parts of speech and Gazette Features Reading Notes
Causes of signal degradation in optical fiber communication
Creation and management of MySQL database and table
Kubernetes Pod启动流程
Tutorial on principles and applications of database system (053) -- MySQL query (XV): usage of character functions
服务器可用资源查询脚本
Introduction to API testing
机器学习:贝叶斯网络