二进制(1):无符号编码和补码编码

Posted liu_if_else

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二进制(1):无符号编码和补码编码相关的知识,希望对你有一定的参考价值。


一些数学符号的解释:

求和符号:5i=0xi=x0+x1+x2+x3+x4+x5

x 表示向量x ,一组1和0,例如[1010 1100]。

xi此位向量中第i个位。 向量中最右边的位为第0位,向左依次加1.

mod 取模运算 ,求余数运算。 1 mod 2=1 // 3 mod 2=1。在二进制系统中,一个位向量 mod 2k 相当于将此向量截断到k位 。 例如 [1111 1111] (十进制为255)mod 23=[0000 0111](十进制为7)。

111100002=24010 右下角下标表示此数的进制表示格式,例如2为二进制。

B2U。 Binary to Unsigned的简写,既是将二进制位模式通过无符号编码进行解释,转换。此外还有B2T,U2T 之类。

?x? x向下舍入。 ?6.12?=6

?x? x向上舍入。 ?6.12?=7


二进制既是将不同长度的“位”(一个1或0)组合在一起再加上不同的解释以赋予含义。同样的机器代码[ 1000 1010] 在不同的编码模式下的意义是不同的。
这里分析一下无符号编码,既是C语言中的unsigned int, 与补码编码,C语言中的 int。通过五个方面进行学习:1,将位模式转换为两种编码格式下的值的过程的函数缩写,2,位向量在两种编码格式下的取值范围,3,位向量在两种编码格式下的扩展方法,4,理解溢出这个现象,并理解如何通过取余运算正确算出溢出后的值,5,了解通过移位替代乘除法这项优化是如何实现的。
最后了解一个变量在两种格式之下的转换发生了什么,以及计算机如何将1和0转换为字符。

1,无符号编码

–函数缩写

如果有位向量 x[xw?1,xw?2,...,x1,x0] ,则在无符号编码中它的十进制值为:

B2Uw(x)=i=0w?1xi2i1

例如:把[01011110]转换为十进制数值
1,加下标:0716051413121100
2,下标转化为2的幂并乘以相应的位,然后相加:
0?27+1?26+0?25+1?24+1?23+1?22+1?21+0?20=94

–取值范围

假设有一个8位的位向量,最小值无疑是0,它的最大值是 [1111 1111],通过上述公式我们知道它在无符号编码中的十进制值为2的9次方加2的8次方依次到2的0次方,这个2的n的递减次幂的和等于2的n+1次方减1,既2的10次方减1。
所以位向量 [xw?1,xw?2,...,x1,x0] 的取值范围为:

02w?1

–扩展

一个通过无符号编码来解释的位向量如果想在不影响它所代表的值的情况下扩展它的位,它的长度,就得在它的最高位之前添加0,这种方法称为零扩展。

例如:将一个较小的无符号数据类型 unsigned short ( 假设为[1111 1100 0011 1111])转换到一个较大的类型 unsigned
在最底层此变量抓换为位向量后将会变为 [0000 0000 0000 0000 1111 1100 0011 1111]

–溢出

已知 w位的位向量的最大值为以上是关于二进制(1):无符号编码和补码编码的主要内容,如果未能解决你的问题,请参考以下文章

原码反码与补码(二进制数的编码表示)

编码 原码 反码 补码

关于有符号整数的补码编码的一点经验

整数在计算机中的表示

原码反码补码

原码补码反码和移码