本文介绍了二进制binary数据在存储器的表示方式,C语言的位运算符号,有符号和无符号混合运算的规则,主要是乘法和除法规则不同。最后以IIR滤波器定点实现的例子来说明如何提高计算精度。
二进制数据与补码、原码和反码表示以及位运算
位运算是指二进制位的运算,在系统软件中,经常要处理一些二进制位的问题,如设置标志位,进行标志位的检测,通常见于状态寄存器和控制寄存器的访问,位运算的类型有相与,与非,相或,或非,异或,同或,取反等操作。
C语言的位运算
运算符含义描述
&按位与如果两个相应的二进制位都为1,则该位的结果值为1,否则为0
|按位或两个相应的二进制位中只要有一个为1,该位的结果值为1
^按位异或若参加运算的两个二进制位值相同则为0,否则为1
~取反一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0
<
>>右移将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0;对于有符号数据,逻辑右移则高位补零,算术右移则高位填充符号位;
二进制的存储表示方法
计算机中的存储器就是由许多字节(byte)单元组成的。一般,内存的最小度量单位就叫做位(bit),也叫比特。而一个字节就是由8个二进制位组成,其中,最右边的一位叫做最低位LSB,最左边的一位叫做最高位MSB。所以,一个16位的整数将在内存中占据2个字节的存储空间,一个32位的整数类型占据