在这行javascript中代字号是做什么的?

时间:2018-02-23 06:41:49

标签: javascript bitwise-operators

我正在尝试理解这行代码。对r [e]做什么是减号和代价?:

r = {}
for (e of s)
    r[e] = -~r[e] // What is this specific line assigning?

for (e in r)
    if (r[e] == 1)
        return e
return '_'

此代码解决的问题是(特定行已注释):

  

给定一个字符串s,找到并返回a的第一个实例   其中没有重复的字符。如果没有这样的角色,请返回   ' _'

我理解除评论之外的其他行。

2 个答案:

答案 0 :(得分:5)

Tilde是一个unary operator,它右边的表达式执行这个小算法

-(N+1) // N is the expression right to the tilde

因此,在您的代码中,它将r[e]递增1(因为双重否定)。

请参阅以下示例:

console.log(~-2); // 1
console.log(~-1); // 0
console.log(~0);  // -1
console.log(~1);  // -2
console.log(~2);  // -3

答案 1 :(得分:2)

Tilde是NOT操作的按位运算符。

它将一个数字作为操作数,将其转换为32位整数(参考IEEE_754-1985并翻转所有位.0变为1,1。变为0。

例如,如果数字5由

表示
00000000 00000000 00000000 00000101

数字〜5是上面的,翻转位

11111111 11111111 11111111 11111010

〜5的十进制值是(-6)。这也被称为2的补充。由于最重要的位(代表JavaScript中数字的符号)被翻转,因此符号将始终改变。 2的补码导致X的值变为 - (X + 1)

某些应用程序(如引擎,使用按位数据结构和按位操作)在这些应用程序中起作用。

  • 按位OR(|)
  • 按位AND(&)
  • 按位NOT(〜)
  • 按位异或(^)
  • 按位左移(<<<<<<<)
  • 按位右移(>>)