原码,反码,补码
什么是原码呢?
原码:十进制数据的二进制表现形式,最左边的是符号位,0为正数,1为负数。
BIT的概念:
bit是“Binary digit” 的缩写,即二进制数字位。在数字系统中,所有信息最终都可被表示为一系列的“开”或“关”,“是”或“否”,“上”或“下”等二元状态。比特就是用来描述这种最基本的状态单位。
在计算机中,所有的数据最终都会被编码成为这样的比特序列。例如:字母“A”在ASCII编码中会被转换为数字65,而这个数字65又会进一步转换为一个8比特的二进制数(01000001)。这里的每一个“0”或“1”就是一个比特。
- 1比特(bit)只能表示两种状态之一。
- 8比特组成为一个字节(Byte),能表示从0到255(即2^8)之间的任意整数,这对于字母,数字,符号非常有用。
- 计算机内存的大小,文件的大小等,本质上都是用比特(或其倍数单位如字节,千字节,兆字节等)来衡量的。
举例:
56 ====> 0 0 1 1 1 0 0 0
十进制 二进制
最前面的1位是符号位,后面的7位是数据
0 0 1 1 1 0 0 0
符号位 数据
一个字节的最大值是多少
0 1 1 1 1 1 1 1
十进制为:127
原码的弊端:
十进制数据的二进制表现形式,最左边是符号位,0为正,1为负
利用原码对正数进行计算是不会有问题的。
但是如果是负数计算,结果就出错,实际运算的结果,跟我们预期的结果是相反的。
例如:
负一 : 1 0 0 0 0 0 0 1
如果负一加一的话,那么就是
负一 + 1 : 1 0 0 0 0 0 1 0
那么就变为了-2,正确答案应该0才对
什么是反码呢?
那么为了解决计算负数的问题,就出现了如下的反码。
反码:正数的补码反码是其本身,负数的反码是符号位保持不变,其余位取反。
计算规则:正数的反码不变,负数的反码在原码的基础上,符号位不变。数值取反,0变1,1变0。
核心知识点:
1、正数的反码不变。 原因是什么?反码的用处就是用来解决负数计算的,所以你在计算正数时,用不到反码。2、反码是如何得到的?
在原码的基础上,符号位不变,其余位全部取反,也就是0变1,1变0
举例:
原码:
-56 1 0 1 1 1 0 0 0
反码:1 1 0 0 0 1 1 1
反码 + 1 : 1 1 0 0 1 0 0 0
再将反码转为原码: 1 0 1 1 0 1 1 1
-55 的原码就是 : 1 0 1 1 0 1 1 1
如下图:如果计算的结果为负数,那么反码就不会有问题啦。
但如果是跨域0时,就会出现一个问题,因为0在原码与反码的表示中有两种表示形式,所以,只要当负数与正数进行计算,结果为正数时,都会导致值小了 1。

所以对于这种情况,创作者给出了补码的解决方案,请看下面
什么是补码呢?
解决有反码有两个0的情况
补码:正数的补码是其本身,负数的补码是在其反码的基础上+1。
看下图:

举例:
-4 的源码 :1 0 0 0 0 1 0 0
-4 + 2 = -2
-4 的反码为:1 1 1 1 1 0 1 1
-4 的补码为:1 1 1 1 1 1 0 0
使用补码进行计算: +2
+2 的结果为: 1 1 1 1 1 1 1 0
逆转
补码变反码:因为补码是反码加1得到的,所以逆转回去需要减一
1 1 1 1 1 1 0 1
在变为原码: 1 0 0 0 0 0 1 0
得到 -2
举例2:
-4 + 5 = 1
-4原码:1 0 0 0 0 1 0 0
1原码:0 0 0 0 0 0 0 1
直接用补码进行计算:
-4 补码: 1 1 1 1 1 1 0 0
5的补码: 0 0 0 0 0 1 0 1
相加的到的补码为: 0 0 0 0 0 0 0 1
转原码 : 0 0 0 0 0 0 0 1
因为正数的原码等于反码等于补码
结果为 1
在计算机中的存储与计算中,都是使用补码。
注意:-128的由来就是因为补码 1 0 0 0 0 0 0 0 直接认定为 -128。
1379

被折叠的 条评论
为什么被折叠?



