C语言单片机:左移与右移
b=a<<n 等价于b=a*2^n(左移后是左移前的2^n倍:变大)
b=a>>n 等价于b=a/2^n(右移前是右移后的2^n倍 变小)
说个容易记的
左移n位就是将数转为二进制后 右面加n个零 左面的n位舍弃
右移n位就是将数转为二进制后 左面加n个零 右面的n位舍弃
在单片机中控制LED灯假设低电平亮时,不管是左移还是右移,都是补0,所以亮的灯越来越多。
_cror_(P1,1):循环右移,被移出的放在最高位,来回循环,所以P1中0和1的位数不变,只是改变了0 1的位置,因此在右移过程中亮灯的数量不变,只是改变了亮灯的位置
_crol_(P1,1):循环左移,被移出的放在最低位,来回循环,所以P1中0和1的位数不变,只是改变了0 1的位置,因此在左移过程中亮灯的数量不变,只是改变了亮灯的位置