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