首页 > 代码库 > 原码, 反码, 补码,浮点数编码

原码, 反码, 补码,浮点数编码

1. 为何要使用原码,补码反码                 

是因为计算机只能做加法,不能做减法,而补码就完美的解决了这个问题。

2. 原码                                               

原码就是第一位是符号位,是人最容易理解和计算的编码。

[+1] = 0000 0001

[-1] = 1000 0001

3. 反码                                                

正数的反码是其本身

负数的反码是在原码的基础上,符号位不变,其余的各个位取反

[+1] = [00000001] = [00000001]

[-1] = [10000001] = [11111110]

 

4. 补码                                                      

 

正数的补码不变。

负数的补码在原码的基础上,符号位不变,其余取反,再加1

[+1] = [00000001] = [00000001] = [00000001]

[-1] = [10000001] = [11111110] = [11111111]

 

5. 浮点数编码                                        

浮点数编码以科学计数法表示,分为3个部分:符号,指数,尾数
这里以float为例讲解,float在内存中占4个字节,最高位是符号位,然后从左向右取8位
是指数位,剩余位是尾数位。

12.25转为二进制位1100.01,用科学计数法表示为1.10001 * 2^3
符号位:0
指数位:3 + 127 = 130(这里加127的原因是为了方便处理负数,这样编码以后就没有
负数的概念了,负数是0-127,正数是128-255)130的二进制是:10000010
尾数位:100010000000000000000000 (不足23位,后面补0)

这里尾数位最高位恒为1 ,可以省略,转换回10进制的时候,加回来即可。
12.25f转换为二进制编码为:010000010100010000000000000000000 ,再转为
16进制是:0x41440000
小尾方式存放:00004441

 

 

 

 

 

 

                                         

 

原码, 反码, 补码,浮点数编码