1、双目运算符
位移位运算符是将数据看成二进制数,对其进行向左或向右移动若干位的运算。
位移位运算符分为左移和右移两种,均为双目运算符。
例如: 8 >> 3 (意思是8向右移动3位)第一运算对象是移位对象,第二个运算对象是所移的二进制位数。
2、逻辑移位与算术移位
在嵌入式开发中,移位操作是常用的一种运算。但是在进行移位运算的时候,如果没有考虑到有符号和无符号的移位区别,就很容易掉进陷阱,得不到我们想要的结果。
我们可以看下面例子,你们猜出结果么?
signedchar i = -125;
i= i >> 2;
cout<< (int)i;
return 0;
编译结果为:-32
为什么有这样的结果?首先介绍两个概念:逻辑移位和算数移位。
逻辑移位,简单理解就是物理上按位进行的左右移动,两头用0进行补充,不关心数值的符号问题。
算术移位,同样也是物理上按位进行的左右移动,两头用0进行补充,但必须确保符号位不改变。
算术移位指令
算术移位指令有:算术左移SAL(ShiftAlgebraic Left)和算术右移SAR(ShiftAlgebraic Right)。算术移位指令的功能描述如下:
(1)算术左移SAL把目的操作数的低位向高位移,空出的低位补0;
(2)算术右移SAR把目的操作数的高位向低位移,空出的高位用最高位(符号位)填补。
逻辑移位指令
此组指令有:逻辑左移SHL(ShiftLogical Left)和逻辑右移SHR(ShiftLogical Right)