我在测试中看到了这个问题,但我不了解操作员如何处理该声明。
let a = ~-(2 + "2");
console.log(a);

答案 0 :(得分:7)
:ruby
entries = [{
:title => "The Fellowship of the Ring",
:body => "We should walk instead of fly"
}]
!!! 5
%html
%head
%title Blog
%body
#content
- entries.each do |entry|
.entry
%h3.title= entry[:title]
%p.body= entry[:body]
~-(2 + "2")
(连接)= 2 + "2"
"22"
(强制)= -"22"
-22
(按位NOT)= - ( - 22 + 1)= 21 按位注意任何数字x的产量 - (x + 1)。例如,〜-5产生4。
答案 1 :(得分:2)
(2+"2")
生成字符串"22"
-("22")
与(-1)*(“22”)相同,并产生数字-22
~
),结果为21
要理解最后一步,您需要知道JavaScript将数字存储为64位浮点数,但所有按位运算都是使用2的补码对32位有符号整数执行。
所以:
0000 0000 0000 0000 0000 0000 0001 0110
1111 1111 1111 1111 1111 1111 1110 1001
1111 1111 1111 1111 1111 1111 1110 1010
~-22
=按位不是-22 = 0000 0000 0000 0000 0000 0000 0001 0101
10101
in binary = 21
in decimal