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

Posted 三度修炼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原码, 反码, 补码,浮点数编码相关的知识,希望对你有一定的参考价值。

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

 

 

 

 

 

 

                                         

 

以上是关于原码, 反码, 补码,浮点数编码的主要内容,如果未能解决你的问题,请参考以下文章

阅读《C++Primer》的个人记录——2.1基本内置类型-关于浮点数补码

数据的表示:原码反码补码移码以及浮点数的运算

有符号数的三种表示:原码反码与补码

嵌入式DSP开发的定点数和浮点数

004_详解计算机各种语言浮点数运算会存在精度损失原因

浮点数与整型在内存中的存储比较