【问题标题】:Checking to see if I understand basic Java bitwise operations检查我是否了解基本的 Java 按位运算
【发布时间】:2017-03-22 09:48:12
【问题描述】:

类阅读中的示例代码具有以下代码:

// 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 的补码。

至于我为什么列出编译器设计,这个类是高级编程语言,该方法来自基于 Java 的 C 语言词法分析器。我们现在正在讨论编译和解释。

【问题讨论】:

  • 您可以只编写代码并打印结果吗?
  • 按位运算用作布尔运算,但对于每个位而不是逻辑值。因此,& 将在两个源位都为 1 时将其设置为 1,如果至少有一个源位为 1,| 将其设置为 1。无论如何,这与 2 的补码没有任何共同之处。跨度>

标签: java math binary bitwise-operators twos-complement


【解决方案1】:

按位 & 运算符执行按位与运算。

按位 ^ 运算符执行按位异或运算。

按位 |运算符执行按位包含 OR 运算。

据我所知,|= 结果将包含来自 A & B;

是的。如果 A 或 B 中的任何一个对于特定位为 1,或者如果两者都为 1,则结果位为 1。

&= 结果将只包含两者中都存在的那些。

再次,是的。只有当 A 和 B 的位都为 1 时,结果位才会为 1;否则为 0。

【讨论】:

    猜你喜欢
    • 2015-09-23
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    • 2011-04-24
    • 1970-01-01
    • 2015-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多