我今天正在阅读一些我认为合理的程序员的代码,我注意到他们使用a =~0
来设置循环退出变量。
有没有令人信服的理由这样做而不仅仅是quit = 1;
?
在我继续改变它之前,我大多只是好奇。谢谢!
示例:
while(!quit){
...;
if(!strcmp(s, "q"))
quit=~0;
}
答案 0 :(得分:4)
没有充分的理由,除非其他代码以不同的方式测试quit
,例如测试任何其他位。 !0
是一个,但~0
在所有现代架构中都是-1。
在某些架构上,0比0更快,但任何体面的编译器都应该对它进行优化。
答案 1 :(得分:2)
~0
通常为-1,而!0
定义为1。
当然,!~0
和!!0
都是0,所以没有令人信服的理由使用其中一个,除了~0
是非惯用的(意思是人们不会知道你在做什么。
答案 2 :(得分:0)
在C中,〜是用于恭维的一元运算符,它将位翻转到它们的相反状态。所以从技术上来说代码是有效的,因为if()子句只评估是否存在0(假)或任何非0(真)。坦率地说,我认为评估真假是有点过分。如果我真的按比例进行评估,我只会考虑使用它。也许可能会有一个关于表现的争论,但我对此表示怀疑。