检查我是否了解基本的 Java 位运算
Checking to see if I understand basic Java bitwise operations
class 阅读中的示例代码具有以下代码:
// adjustSpacing will set bits in the spacing word to indicate the
// type of spacing adjustment to be done, LEADING OR TRAILING.
public void adjustSpacing(int spacingValue)
{
spacing |= spacingValue;
}
我以前从未使用过按位运算符,因为我从来不需要它们。我查看了如何进行这些操作,它们看起来很简单,但我想检查一下我是否真的拥有它。
拿
A = 1010 1000
B = 0111 0111
A |= B -> 1111 1111
A &= B -> 0010 0000
据我所知,|= 结果将包含 A 和 B 中的所有结果;
&= 结果将只有两者都存在的结果。
我没听错吗?几乎让我想起做 2 的补码。
至于我为什么列出编译器设计,这个class是高级编程语言,那个方法来自一个基于java的C语言词法分析器。我们现在正在介绍编译和解释。
按位 & 运算符执行按位与运算。
按位 ^ 运算符执行按位异或运算。
按位 |运算符执行按位包含或运算。
From what I can tell, the |= result will have all of the ones from
both A & B;
是的。如果 A 或 B 中的某个特定位为 1,或者如果两者都为 1,则结果位为 1。
the &= result will have only the ones present in both.
再一次,是的。只有当 A 和 B 的位都为 1 时,结果位才为 1;否则 0.
class 阅读中的示例代码具有以下代码:
// adjustSpacing will set bits in the spacing word to indicate the
// type of spacing adjustment to be done, LEADING OR TRAILING.
public void adjustSpacing(int spacingValue)
{
spacing |= spacingValue;
}
我以前从未使用过按位运算符,因为我从来不需要它们。我查看了如何进行这些操作,它们看起来很简单,但我想检查一下我是否真的拥有它。
拿
A = 1010 1000
B = 0111 0111
A |= B -> 1111 1111
A &= B -> 0010 0000
据我所知,|= 结果将包含 A 和 B 中的所有结果; &= 结果将只有两者都存在的结果。
我没听错吗?几乎让我想起做 2 的补码。
至于我为什么列出编译器设计,这个class是高级编程语言,那个方法来自一个基于java的C语言词法分析器。我们现在正在介绍编译和解释。
按位 & 运算符执行按位与运算。
按位 ^ 运算符执行按位异或运算。
按位 |运算符执行按位包含或运算。
From what I can tell, the |= result will have all of the ones from both A & B;
是的。如果 A 或 B 中的某个特定位为 1,或者如果两者都为 1,则结果位为 1。
the &= result will have only the ones present in both.
再一次,是的。只有当 A 和 B 的位都为 1 时,结果位才为 1;否则 0.