计算机基础知识点(二)、移位运算

移位运算符:左移运算符<<、右移运算符>>

左移运算符<<按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。

右移运算符>>按二进制形式把所有的数字向右移动对应位移位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1。

C语言移位运算只针对于整数。

下面以一个C函数举例

int wordAgliment(int x) {
    return (x+7) >> 3 << 3;
}

分析一下这个函数

当输入 x = 5   
x+7 = 12
12 用二进制表示为
0000 1100
右移三位变成
0000 0001
再左移三位变成
0000 1000
这个函数的结果为 8
即:输入x=5,得到的值为8

同理:

x=15,
x+7 = 22
22用二进制表示为:
0001 0110
右移三位变成
0000 0010
再左移三位变成
0001 0000
这个函数的运行结果为 16
即:输入的x=15,得到的值为16

可以总结一下规律:

一个数k为2的m次方,输入一个x,经过下面的移位运算得到的结果是对x进行向上取整为k的整数倍。
(x+ k-1) >> m << m

举例验证

如果k=8,k-1=7,8是2的3次方,即m=3,即得到

(x+7) >> 3 << 3

输入的x经过这种位移处理后的,会向上取8的倍数,例如输入5 ——> 结果取8,输入15 ——> 结果取16

如果k=16,k-1=15,16是2的4次方,即m=4,即得到

(x+15) >> 4 << 4

输入的x经过这种位移处理后的,会向上取16的倍数,例如输入5 ——> 结果取16,输入22 ——> 结果取32

溪浣双鲤的技术摸爬滚打之路

你可能感兴趣的:(计算机基础知识点(二)、移位运算)