~0 vs.0.0与C中的1

时间:2011-04-12 18:05:34

标签: c bit-manipulation

我今天正在阅读一些我认为合理的程序员的代码,我注意到他们使用a =~0来设置循环退出变量。

有没有令人信服的理由这样做而不仅仅是quit = 1;

在我继续改变它之前,我大多只是好奇。谢谢!

示例:

while(!quit){
    ...;

    if(!strcmp(s, "q")) 
        quit=~0;
}

3 个答案:

答案 0 :(得分:4)

没有充分的理由,除非其他代码以不同的方式测试quit,例如测试任何其他位。 !0是一个,但~0在所有现代架构中都是-1。

在某些架构上,0比0更快,但任何体面的编译器都应该对它进行优化。

答案 1 :(得分:2)

~0通常为-1,而!0定义为1。

当然,!~0!!0都是0,所以没有令人信服的理由使用其中一个,除了~0是非惯用的(意思是人们不会知道你在做什么。

答案 2 :(得分:0)

在C中,〜是用于恭维的一元运算符,它将位翻转到它们的相反状态。所以从技术上来说代码是有效的,因为if()子句只评估是否存在0(假)或任何非0(真)。坦率地说,我认为评估真假是有点过分。如果我真的按比例进行评估,我只会考虑使用它。也许可能会有一个关于表现的争论,但我对此表示怀疑。