【问题标题】:extract the last 2 bits in binary提取二进制的最后 2 位
【发布时间】:2016-09-12 20:44:53
【问题描述】:

我是一个 java 菜鸟,所以如果我不能很好地解释我的问题,请多多包涵。

所以 254 的二进制数是 11111110。我的问题是我想抓住最后 2 位 (10)。有人告诉我使用 % 运算符来执行此操作,但我不知道如何操作。谁能帮我解决这个问题?

【问题讨论】:

  • 你想如何“抓住”它们?您想获得String“10”还是数字“2”?
  • 我需要编写方法,以便 main 中的以下内容正确:result = getLeastSignificant2(255); System.out.println("getLeastSignificant2(255)的结果是" + result ); if ( result == 3 ) { System.out.println( "这是正确的!" ); }else { System.out.println("这是错误的!应该是 3"); }

标签: java binary bits


【解决方案1】:

假设你想得到最后2位二进制数字的数值,我们可以使用掩码。

public static void main(String[] args) {
    int n = 0b1110;
    int mask = 0b11;
    System.out.println(n & mask);
}

代码所做的是获取数字,在本例中为 0b1110,并使用定义为 0b11 的掩码执行 and

0b 是您告诉 java 您将数字表示为二进制的方式。

如果你想获得二进制数作为二进制,你可以使用这个: Integer.toBinaryString(n & mask)

【讨论】:

    【解决方案2】:

    您可以使用 % 转换为二进制,但我相信使用 Integer.toBinaryString() 和 charAt() 来获取最后 2 个字符更容易,就像他们在这里所做的那样 How do you get the last character of a string?

    【讨论】:

    • 你能帮帮我吗?为什么当我屏蔽否定位并将其移位时,我得到一个负值。例如:10000000 | 00000000 | 00000000 | 00000000。这里我有一个带有否定位的int。如果我把它移到右边。 { 00000000 | 00000000 | 00000000 | 00000001 } 并掩盖我得到-1的那一位。在.Cpp 我会得到 1。
    【解决方案3】:

    最后两位可以通过x % 4x & 3获得。

    x % 44除以余数,0-3,最后两位表示。

    x & 3 是与二进制数 11 的按位与运算,即将所有其他位归零。

    第二种通常是运行时最快的方法,也是进行位操作的首选方法。 (使用按位运算符进行位操作,对吗?)

    【讨论】:

    • x & 3 仅适用于 255,但如果我想获得 64 的最后 2 位怎么办?
    • @dye 64 & 3 == 064(十进制)是01000000(二进制),最后2位是00。哪一部分让你感到困惑?
    猜你喜欢
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-21
    • 2015-03-23
    • 1970-01-01
    • 2012-11-26
    相关资源
    最近更新 更多