左移运算:对于一个位表示为的操作数 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。
几乎所有的编译器/机器组合都对有符号数使用算术右移。而对于无符号数右移必须是逻辑的。
下面再给出一个例子:
其中斜体的数字表示最右端(左移)或最左端(右移)填充的值。