Bithack for:如果x为0,则x应为-1,否则x应保持不变

Bithack for:如果x为0,则x应为-1,否则x应保持不变,c,int,bit-manipulation,C,Int,Bit Manipulation,实现以下结果的最快bit破解是什么 设x是一个4字节的int,在C程序中 如果x是0x00000000,那么x应该是0xffffff,否则x应该保持不变。 x |=-(x==0) x |=-!x x=x?x:0xFFFFFFFF if(x==0) x=0xFFFFFF 基准测试并选择适合您的如果对您来说还不够好,那么一个简单的就很难产生比(x==0){x=0xFFFFFF;}更可读、更高效的代码。这应该是x=0xFFFFFF。在两个互补系统上,您也可以使用x-=!x@TomKarzes:在非

实现以下结果的最快bit破解是什么

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

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

  • x |=-(x==0)
  • x |=-!x
  • x=x?x:0xFFFFFFFF
  • if(x==0)
    x=0xFFFFFF


基准测试并选择适合您的

如果
对您来说还不够好,那么一个简单的
就很难产生比(x==0){x=0xFFFFFF;}
更可读、更高效的代码。这应该是x=0xFFFFFF。在两个互补系统上,您也可以使用
x-=!x
@TomKarzes:在非2的补码系统上,-1不是0xFFFFFFFF,因此如果需要该位模式,则需要限定。但是问题是“x应该是-1”和
x-=!x
将把0转换为-1,而不管表示形式如何。@rici我按消息正文而不是主题行,但综合起来,我想它们意味着2的补码表示形式。