【问题标题】:Bithack for: if x is 0, then x should be -1, else x should be untouchedBithack for:如果 x 为 0,则 x 应为 -1,否则 x 应保持不变
【发布时间】:2016-06-21 04:33:24
【问题描述】:

实现以下结果的最快的 bit-hack 是什么?

让 x 是一个 4 字节的 int,在 C 程序中。

如果 x 是 0x00000000,那么 x 应该是 0xFFFFFFFF,否则 x 应该保持不变。

【问题讨论】:

  • 一个简单的if 还不够好吗?
  • 很难生成比if(x == 0) { x = 0xFFFFFFFF; }更具可读性和效率的代码。

标签: c int bit-manipulation


【解决方案1】:
  • x |= -(x == 0);
  • x |= -!x;
  • x = x ? x : 0xFFFFFFFF;
  • if (x == 0) x = 0xFFFFFFFF;

    ...

基准测试并选择适合您的方法

【讨论】:

  • 应该是 x = 0xFFFFFFFF。
  • 在补码系统上,也可以使用x -= !x;
  • @TomKarzes:在非二进制补码系统上,-1 不是 0xFFFFFFFF,因此如果需要该位模式,则需要进行限定。但问题是“x 应该是 -1”,x -= !x 将 0 转换为 -1 而不管表示形式如何。
  • @rici 我是通过消息正文而不是主题行,但综合起来,我猜它们暗示了一个二进制补码表示。
猜你喜欢
  • 2021-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-18
  • 2019-12-10
  • 2015-09-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多