【问题标题】:Interview: Flipping Bits采访:翻转位
【发布时间】:2011-03-12 06:18:28
【问题描述】:

我最近看到一个面试问题,问如下:

给定一个 32 位数字,写伪 翻转倒数第二位的代码

最好/最简单的方法是什么?

【问题讨论】:

  • @Ether 这绝对不是什么特别花哨的东西。这是 XOR 最基本的用法。因此,这与另一个问题无关,后者是关于位操作的酷复杂用法。
  • 也许面试官正在追问你是在处理大端还是小端表示,或者类似的东西。

标签: pseudocode


【解决方案1】:
#define MASK 0x00000002 

新 = 旧 ^ 面具

【讨论】:

    【解决方案2】:

    我看到一些答案将“最后一位”解释为 MSB,其他解释为 LSB。也许他们正在寻找足够聪明的候选人,以便在编写代码之前暂停并要求澄清。这在实际工作中非常重要。

    【讨论】:

      【解决方案3】:
      X ^ (1<<n) will toggle the state of nth bit in the number X.
      

      【讨论】:

        【解决方案4】:

        与 2 异或。例如 i = i ^ 2

        【讨论】:

          【解决方案5】:
          a = 0x80000000; // the second last bit set
          if( i & a == 0) // not set in i -> set it
            i |= a;
          else // set -> un-set it in i
           i &= ~a;
          

          edit: arg,当然你可以对它进行异或运算 :-) 但是 2 是倒数第二位而不是倒数第二位。最好谈谈 MSB 和 LSB。

          【讨论】:

            【解决方案6】:

            使用按位异或运算符?

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2011-12-08
              • 2017-04-13
              • 1970-01-01
              • 2012-06-06
              • 1970-01-01
              • 2017-05-07
              • 1970-01-01
              • 2013-03-02
              相关资源
              最近更新 更多