当前位置:网站首页>学习笔记:原码, 反码, 补码
学习笔记:原码, 反码, 补码
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。
结论:减去一个数,等于加上这个数的补码。因为补码计算的便利性,所以计算机中实际存储的是补码。
参考资料
边栏推荐
- Prime Ring Problem
- Web middleware log analysis script 3.0 (shell script)
- Machine learning: Bayesian Networks
- What are the ways to quickly improve programming skills in the process of programming learning?
- Pycharm automatically adds header comments when creating py files
- 01. MySQL transaction isolation level and concurrent database access
- [go] how to control the maximum number of concurrent processes
- [unity] random generation of two-dimensional cave map
- Fastjason handles generics
- [ickim 2022] the Fourth International Conference on knowledge and information management
猜你喜欢

记一次自定义 Redis 分布式锁导致的故障

FreeBSD bNXT Ethernet driver source code reading record 2:

Google Gson用法详解

《分布式微服务电商》专题(一)-项目简介

What should I do when my blog is attacked by hackers?

大咖观点+500强案例,软件团队应该这样提升研发效能

How to obtain the cash flow data of advertising services to help analyze the advertising effect?

What are the ways to quickly improve programming skills in the process of programming learning?

U++ learning notes ustruct, uenum declaration and function library simple function implementation

Leetcode537. 复数乘法(可以,已解决)
随机推荐
Case when of SQL
“蔚来杯“2022牛客暑期多校训练营2 G.[Link with Monotonic Subsequence] 分块构造
"Wei Lai Cup" 2022 Niuke summer multi school training camp 2 personal problem sets
C language enumeration types and unions
What should I do when my blog is attacked by hackers?
Creation and management of MySQL database and table
Cross linguistic transfer of correlations between parts of speech and Gazette Features Reading Notes
Nodejs builds cloud native microservice applications based on dapr, a quick start guide from 0 to 1
Pycharm automatically adds header comments when creating py files
[secsha concept] original reverse supplement
Docker advanced -mysql master-slave replication
SOC first project hello_ world
Big view +500 cases, software teams should improve R & D efficiency in this way
两阶段提交和三阶段提交
聚势|海泰方圆亮相第五届数字中国建设峰会
QTreeWidget虚线设置
Prime Ring Problem
言语理解-片段阅读的结构剖析练习
销量连连夺冠,五菱的成功秘诀只有低价吗?
Is it safe for Huatai Securities to open an account online? How to handle it?