二进制(1):无符号编码和补码编码
Posted liu_if_else
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二进制(1):无符号编码和补码编码相关的知识,希望对你有一定的参考价值。
一些数学符号的解释:
求和符号:
B2U。 Binary to Unsigned的简写,既是将二进制位模式通过无符号编码进行解释,转换。此外还有B2T,U2T 之类。
二进制既是将不同长度的“位”(一个1或0)组合在一起再加上不同的解释以赋予含义。同样的机器代码[ 1000 1010] 在不同的编码模式下的意义是不同的。
这里分析一下无符号编码,既是C语言中的unsigned int, 与补码编码,C语言中的 int。通过五个方面进行学习:1,将位模式转换为两种编码格式下的值的过程的函数缩写,2,位向量在两种编码格式下的取值范围,3,位向量在两种编码格式下的扩展方法,4,理解溢出这个现象,并理解如何通过取余运算正确算出溢出后的值,5,了解通过移位替代乘除法这项优化是如何实现的。
最后了解一个变量在两种格式之下的转换发生了什么,以及计算机如何将1和0转换为字符。
1,无符号编码
–函数缩写
如果有位向量
例如:把[01011110]转换为十进制数值
1,加下标:
2,下标转化为2的幂并乘以相应的位,然后相加:
–取值范围
假设有一个8位的位向量,最小值无疑是0,它的最大值是 [1111 1111],通过上述公式我们知道它在无符号编码中的十进制值为2的9次方加2的8次方依次到2的0次方,这个2的n的递减次幂的和等于2的n+1次方减1,既2的10次方减1。
所以位向量
–扩展
一个通过无符号编码来解释的位向量如果想在不影响它所代表的值的情况下扩展它的位,它的长度,就得在它的最高位之前添加0,这种方法称为零扩展。
例如:将一个较小的无符号数据类型 unsigned short ( 假设为[1111 1100 0011 1111])转换到一个较大的类型 unsigned
在最底层此变量抓换为位向量后将会变为 [0000 0000 0000 0000 1111 1100 0011 1111]
–溢出
已知 w位的位向量的最大值为