Bithack for:如果x为0,则x应为-1,否则x应保持不变
实现以下结果的最快bit破解是什么 设x是一个4字节的int,在C程序中 如果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:在非
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的补码表示形式。