我正在阅读 JS 手册,发现了一个不错的技巧,即 ~val === (val != -1)
。
我发现它很好,并且想在我的 C 代码中使用它。
它是可移植的吗?我检查了我的 GNU/Linux 机器,它可以工作。
编辑:看来我问得不太清楚。当然,我知道,C中没有===
。
问题是,两者都是条件
int val;
if (~val) {...}
if (val != -1) {...}
相等吗?
最佳答案
以下答案是针对该问题最初的措辞而写的,这导致我自己和其他人认为他是在问 ~ans
和 (ans ^ -1 )
是等价的。
这个技巧不像~val
那样可移植,因为它假设-1 == 0b111111111...
,这仅在二进制补码机器上成立(当然) ,这几乎适用于当今的任何机器)。它利用了异或运算作为“受控反相器”的事实,翻转其左操作数中对应的右操作数位为 1 的每一位。
但是,用 ~0
替换 -1
可能会起作用。
关于c - 按位取反检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12970790/