什么按位〜运算符对数字做什么

时间:2013-09-05 17:53:09

标签: coffeescript bit-manipulation bitwise-operators

我在关于coffeescript的小书中找到了这个

!!~ string.indexOf "test"

我测试

~-1 == 0
~0  == -1
~3 == -4
~-2 == 1

那么这里到底发生了什么以及为什么~0上返回-1-1是唯一产生0的值?

1 个答案:

答案 0 :(得分:3)

two's complement integers中,-1是所有1位的序列。 ~ bitwise operator

  

反转其操作数的位。

以1位的顺序反转位给出一个0位的序列,0位的序列是整数0.因此~i当且仅当i === -1为零时为零

String#indexOf

  如果找不到值,

[...]返回-1

将这两件事放在一起告诉我们:

~ string.indexOf "test"
当且仅当"test"中不存在string时,

为零。然后我们将!!"强制转换为布尔值"诀窍和事实0是唯一在JavaScript中是假的,我们有:

!!~ string.indexOf "test"
如果true出现"test"string出现false则为string.indexOf("test") != -1 ;或者,在合理和可读的代码中,它们与:

相同
{{1}}

如果这本书实际上是在建议你编写那样的代码那么你应该烧掉那本书并找到一本更好的书。使用所有那些小小的东西只是那种"聪明"这会让每个维护代码的人都讨厌你。