当前位置:网站首页>学习笔记:原码, 反码, 补码
学习笔记:原码, 反码, 补码
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。
结论:减去一个数,等于加上这个数的补码。因为补码计算的便利性,所以计算机中实际存储的是补码。
参考资料
边栏推荐
- 网络性能评估工具 ping/mtr
- poj1521
- [Go]三、最简单的RestFul API服务器
- U++ learning notes ustruct, uenum declaration and function library simple function implementation
- Basic version of Google browser debugging tool (I)
- Two stage submission and three stage submission
- 当博客被黑客攻击时该怎么办?
- Tutorial on the principle and application of database system (057) -- MySQL exercises
- 元素和小于等于阈值的正方形的最大边长(来源:力扣(LeetCode))
- Spark-SQL中根据年月日显示周几用date_format(date,‘u‘)
猜你喜欢

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

Redis数据结构详解,结合书本

Basic version of Google browser debugging tool (I)

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

Web middleware log analysis script 3.0 (shell script)

The sales volume has won the championship repeatedly. Is the secret of Wuling's success only low price?
![[combinational logic circuit] - encoder](/img/a5/c92e0404c6a970a62595bc7a3b68cd.gif)
[combinational logic circuit] - encoder

Failed to load DLL

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

FreeBSD bNXT Ethernet driver source code reading record 2:
随机推荐
Kubernetes Pod启动流程
Mysql_ Note1
【Go】如何控制协程的最大并发数
Zero copy of network file transfer
[go] III. The simplest restful API server
Leetcode 537. complex multiplication (netizens' thoughts, ashamed)
Codisvsrediscluster: which cluster scheme should I choose?
Leetcode537. 复数乘法(可以,已解决)
[go] how to control the maximum number of concurrent processes
MDK编译过程及ARM编译工具链
C语言中的整型数据类型(你真的了解吗)
Codeforces Round #810 (Div. 2)A~C
快速创建题目文件夹
Tutorial on principles and applications of database system (054) -- MySQL query (16): usage of date time function
Qtreewidget dotted line setting
Leetcode537. Complex multiplication (yes, solved)
U++学习笔记 UStruct、UEnum声明以及函数库简单函数实现
[Unity] 二维洞穴地图随机生成
Introduction to API testing
Zombie's treasure test (enumeration)