为什么〜 - (2 +" 2")是21?

时间:2018-02-19 23:28:26

标签: javascript operators

我在测试中看到了这个问题,但我不了解操作员如何处理该声明。



let a = ~-(2 + "2");
console.log(a);




2 个答案:

答案 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]
  • 0:~-(2 + "2") (连接)= 2 + "2"
  • 1:"22"(强制)= -"22"
  • 2:-22(按位NOT)= - ( - 22 + 1)= 21
  

按位注意任何数字x的产量 - (x + 1)。例如,〜-5产生4。

答案 1 :(得分:2)

  • 第1步:(2+"2")生成字符串"22"
  • 第2步:-("22")与(-1)*(“22”)相同,并产生数字-22
  • 第3步:不按位(~),结果为21

要理解最后一步,您需要知道JavaScript将数字存储为64位浮点数,但所有按位运算都是使用2的补码对32位有符号整数执行。

所以:

  • -22表示是2 +恭维+22
  • +22 in binary = 0000 0000 0000 0000 0000 0000 0001 0110
  • 2赞美(22)=( - 22)= 1111 1111 1111 1111 1111 1111 1110 1001
    • 1 = 1111 1111 1111 1111 1111 1111 1110 1010
  • ~-22 =按位不是-22 = 0000 0000 0000 0000 0000 0000 0001 0101
  • 10101 in binary = 21 in decimal