左移运算:对于一个位表示为
的操作数 x,x << k 会生成一个指,其位表达式为
。也就是说将x右边的w-k位向左移动k位,丢弃最高的k位,并在右端补k个0.
例如:操作数 x 位表达式为 01010101,x << 3 将得到 10101000。
右移运算:所有的左移操作都是一样的,然而右移运算 x >> k 分为逻辑右移和算术右移。逻辑右移与左移相似,在左端补 k 个0,得到的结果是
。而算术右移是在左端补k个操作数 x 最高有效位的值,得到的结果是
。
例如:操作数 x 位表达式为 00110101, x >> 3(逻辑右移) 将得到 00000110。
操作数 x 位表达式为 00110101, x >> 3(算术右移) 将得到 00000110。
操作数 x 位表达式为 00110101, x >> 3(算术右移) 将得到 111001110。
几乎所有的编译器/机器组合都对有符号数使用算术右移。而对于无符号数右移必须是逻辑的。
下面再给出一个例子:
![](https://img-blog.csdnimg.cn/ad61b256b5954fbc96ec974c5ee375e4.png)
其中斜体的数字表示最右端(左移)或最左端(右移)填充的值。