zoukankan      html  css  js  c++  java
  • 按位非运算符

    JS中的按位非运算符是~,作用是将每位二进制取反

    十进制2的二进制表示为:

     0000,0010

    每位都取反:

     1111,1101

    这是内存中的保存形式。

    我们读取的十进制是根据原码来读取,而在内存中,数值都是以二进制补码形式保存的。

    正数的补码和原码一样,负数的原码转补码或者补码转原码的规则:

    符号位不变,将剩余位取反,得到反码,在反码的基础上最后一位加一得到负数的补码。

    1111,1101输出10进制的过程:

     1.符号位不变,剩余位取反

      1000,0010

     2.最后一位加1

      1000,0011

     3.得的结果1000,0011就是-3的原码形式

    ~(1) = -2

    ~(2) = -3

    ~(3) = -4

    ~(2018) = -2019

    假设A为正数,~(A)结果为B。B是A的每位去反的结果,包括符号位0也取反变成了1。那么B就被当做负数保存在内存中。显示十进制数时,B除符号位外都取反,得到C,C和A的区别在于符号位不同,其他位都一样,然后C的最后一位加1得到最终结果D。D和A相比,除符号位不同外,还大一。

    假设A为负数,~(A)结果为B。B是A的每位取反的结果,符号位从1变成0。那么B被当做正数保存在内存中。A作为负数,在内存中保存的是补码,假设A的原码是C,补码就是C除符号位,每位取反加一。B就是A的补码包括符号位每位取反,不看符号位的变化的话,也就是C取反加一的基础上再次取反,结果就是B比C少1。

    ~(0) = -1

    ~(-1) = 0

    ~(-2) = 1

    ~(-3) = 2

    ~(-4) = 3

    ~~3 = 3

    ~~ 5 = 5

    记忆方法是~(A) = -(A+1)

    负数原码补码转换规则:

      符号位不动,从低位往高位数,遇到第一个1之前,包括第一个1不作任何取反,之后,每位都取反。这样就避免了原码转反码再转补码的繁琐。

      

  • 相关阅读:
    Vsphere日记01.ESXi5.5.install
    Linux快速计算MD5和Sha1命令
    在linux虚机中装vmtools
    BT下载原理分析
    虚拟防火墙实验
    简单介绍一下vue2.0
    小白编程系列(一):编程语言选择
    html几种美丽的分割线
    利用:header匹配所有标题做目录
    markdown编辑器的小建议
  • 原文地址:https://www.cnblogs.com/bibiafa/p/9389213.html
Copyright © 2011-2022 走看看