Skip to content

CSAPP

逻辑右移与算术右移

一般而言,机器支持两种形式的右移: 逻辑右移和算术右移。逻辑右移在左端补k个 0。算术右移是在左端补k个最高有效位的值。

这种做法看上去可能有点奇特,但是我们会发现它对有符号整数数据的运算非常有用

实际上,几乎所有的编译器/机器组合都对有符号数使用算术右移, 且许多程序员也都假设机器会使用这种右移。另一方面,对于无符号数, 右移必须是逻辑的。

与 C 相比, Java 对于如何进行右移有明确的定义。 表达是 x>>k 会将 x 算术右移 k 个位置,而 x>>>k 会对 x 做逻辑右移