【问题标题】:C - Is there any way to check if a number is equal to 1 using bit checks?C - 有没有办法使用位检查来检查一个数字是否等于 1?
【发布时间】:2013-04-25 07:56:31
【问题描述】:

这只是一个有趣的问题 - 我不确定它实际上如何适用。无论如何 - 是否可以使用位检查来查看数字是否等于 1?

【问题讨论】:

  • @TomerArazy:该检查也通过了 0。
  • CPU 总是在位上工作,所以任何方法都可以
  • “使用位检查”到底是什么意思?像((x ^ 1) >> 31) | (-(x ^ 1) >> 31) 这样的东西算作“使用位检查”吗?
  • @harold 这就是我要寻找的,是的。
  • if (n == 1) 检查最低位是否为 1,其余为 0。

标签: c binary bit-manipulation bit


【解决方案1】:

我不确定问题到底是什么,但您可以使用!(x ^ 1)x == 1!(x-1)(x & 1) && !(x & ~1) 或许多其他方式之一。

【讨论】:

    【解决方案2】:

    我认为 if(1==number) 就足够了。在内部进行了一些明智的比较。

    【讨论】:

    • 通常,比较是通过一个指令来实现的,该指令执行减法并设置几个描述结果的位(负数、零、溢出、进位)。所以1 == number 很可能会导致实际的算术运算,而不仅仅是按位比较。
    【解决方案3】:

    我不太了解位检查。如果您的意思是逐位检查,则可以循环执行。或者你可以使用代码:

    int equalsOne(int a) {
        return (a && (a == !!a));
    }
    

    ! 运算符将为非零值返回 0,否则返回 1。 return 语句中的前导 a 消除了 a == 0 的情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-04
      • 2011-04-08
      • 2020-04-03
      • 2012-03-25
      • 1970-01-01
      • 2012-05-07
      • 2022-01-21
      相关资源
      最近更新 更多