【问题标题】:clear all bits from MSB through i (inclusive)清除从 MSB 到 i(包括)的所有位
【发布时间】:2014-09-29 11:13:06
【问题描述】:

下面是通过 i(含)清除所有 MSB(最高有效位)的代码

public int clearBitsMSBThrough(int num, int i) {
    int mask = ( 1 << (i + 1) ) - 1;
    return num & mask;
}

我对“包容性”感到困惑。 例如,如果数字是 0011 1010 并且 i = 3。 掩码为0000 1111,结果为0000 1010,但位置3的位不清零。

我误解了这个问题吗? 我认为应该是:

int mask = (1 << i) - 1;

【问题讨论】:

  • Am I misunderstanding the question?有什么问题?
  • 问题是写一个方法来清除从 MSB 到 i (inclusive) 的所有位。谢谢!
  • 那么,既然你说的是“I think it should be: int mask = (1 &lt;&lt; i) - 1;”,看来你已经知道问题所在和解决方案了
  • 感谢您的帮助!

标签: bit-manipulation bit


【解决方案1】:
public int clearBitsMSBThrough(int num, int i) {    
   int mask = (1 << i) - 1;
   return num & mask;
}

浏览binary subtraction 可能在这方面有所帮助。

【讨论】:

    猜你喜欢
    • 2010-10-19
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    • 2014-09-02
    • 1970-01-01
    • 2013-05-17
    • 2018-11-25
    • 1970-01-01
    相关资源
    最近更新 更多