前言:
今天我也来写博客啦!昨天因为时间的原因遗留了反码
、补码
、移码
等问题,今天狠狠滴把它解决!
look:了解真值
、机器数
、原码
请点击:真值与机器值&小数原码与整数原码定义及举例
1. 反码
反码
其实就是原码
与补码
之间的过渡,一句话总结:正数不变,负数数值取反。一般用[x]反
表示x
这个真值
的反码机器数
;反码的定义中有小数反码
和整数反码
,同样先来看整数反码:
1.1 纯整数反码
纯整数
反码定义x
是真值,n
是整数位数(字节);若字节长为n+1
,则反码整数的表示范围为 -(2n-1)≤x≤2n-1 关于原点对称(与原码相同)。举例子(以二进制八位为例):- +5 = [0,0000101]原 = [0,0000101]反 (正数的反码是它本身)
- -116 = [1,1110100]原 = [1,0001011]反 (除
符号位
外,所有的数值位
取反)
1.2 纯小数反码
纯小数
反码定义n+1
,则反码整数的表示范围为 -(1-2-n)≤x≤1-2-n 关于原点对称(与原码相同)。举例子:- 0.25 = [0.0100000]原 = [0.0100000]反(正数的反码是它本身)
- -0.75 = [1.1100000]原 = [1.0011111]反(除
符号位
外,所有的数值位
取反)
注:
- +0 = [0,0000000]原 = [0,0000000]反
- -0 = [1,0000000]原 = [1,1111111]反;
0的原码和反码表示都不唯一!
2 补码
补码
一句话总结:正数不变,负数=反码+1=原码所有数值位取反+1。一般用[x]补
表示x
这个真值
的补码机器数
;反码的定义中有小数补码
和整数补码
,同样先来看整数补码:
2.1 纯整数补码
纯整数
补码定义x
是真值,n
是整数位数(字节);若字节长为n+1
,则补码整数的表示范围为 -2n≤x≤2n-1 (比原码多表示一个“-2n”,原因后面解释)。举例子(以二进制八位为例):- +5 = [0,0000101]原 = [0,0000101]反 = [0,0000101]补(正数的补码是它本身)
- -116 = [1,1110100]原 = [1,0001011]反 = [1,0001100]补(
反码
+1 或原码
数值位取反+1)
2.2 纯小数补码
纯小数
补码定义n+1
,则反码整数的表示范围为 -1≤x≤1-2-n (比原码多表示一个“-1^”,原因后面解释)。举例子:- 0.25 = [0.0100000]原 = [0.0100000]反 = [0.0100000]补(正数的补码是它本身)
- -0.75 = [1.1100000]原 = [1.0011111]反 = [1.0100000]补(
反码
+1 或原码
数值位取反+1)
注:
- +0 = [0,0000000]原 = [0,0000000]反 = [0,0000000]补 = -0
- -0 = [1,0000000]原 = [1,1111111]反 = [0,0000000]补 = +0
0的补码唯一!
那么问题又来了,既然+0、-0都由[0,0000000]补表示,那 [1,0000000]补表示的是什么呢?
想要解决这个问题,我们就要使用定义来探讨了:
由定义得:- [-1]补(带入小数定义2+x计算) = 10.0000000 - 1.0000000 = 1.0000000;小数补码比原码多表示一个"-1"
- [-128]补(带入整数定义2(n+1)-|x|) = 28-128=128 = 1,0000000 ;整数补码比原码多表示一个"-128"
3. 移码
在真值X上加上一个常数(偏置值),通常这个常数取2n,相当于X在数轴上向正方向偏移了若干单位。一句话总结移码表示方法:补码的基础上将符号位取反。一般用[x]移
表示x
这个真值
的移码机器数
;移码只能用来表示整数
。
3.1 移码的定义
其中机器字长
1为n+1
;移码的整数范围:-2n≤x≤2n-1 。原码
转移码
举例:
- +5 = [0,0000101]原 = [0,0000101]反 = [0,0000101]补 = [1,0000101]移(
正数移码
= 正数原码符号取反) - -116 = [1,1110100]原 = [1,0001011]反 = [1,0001100]补 = [0,0001100]移(
负数移码
= 原码全部取反后 + 1 = 补码的符号位取反)
也可以从定义
上来理解(字长8位):
- x1 = +10101—> [x1]移= 27 + 10101 = 1,0010101( x1 = 20 + 22 +24 = 21D2 )
- x2 = -10101—> [x2]移 = 27 + (-10101) = 0,1101011(- x2 = -21D )
3.2 移码的特点
- 移码中的零表示唯一,[+0]移 = 2n + 0 = [-0]移 = 2n - 0 = 100…0(n个"0")
移码
全为 0 时,对应真值
的最小值 -2n;移码
全为 1 时,对应真值
的最大值 2n-1;- 保持数据原有的大小顺序,移码大真值大,移码小真值小(谁想出来的,太天才了!)
结束语:
花了好一会儿终于把反码
、补码
、移码
的定义及之间的转换总结完成了!下次更新进制间的转换
或者加减乘除?
,要不还是技术文章吧(基础博客写起来好累)。不积跬步无以至千里,希望自己可以每天努力一点!