二进制

作者: 椰果粒 | 来源:发表于2019-03-20 14:53 被阅读0次

    什么是二进制
    二进制以2为基数

    计算机为什么使用二进制

    • 组成计算机系统的逻辑电路有两种状态:开/关,由于每位数据只有开关两种状态,当发生故障时,也可以分析出是哪种状态出错了。
    • 所以二进制表达式具有抗干扰能力强,可靠性高的特点。
      而如果有十位的话,出现故障后,就不容易分析出哪个出错。
    • 二进制也适合逻辑运算。

    二进制的位操作
    位运算包括:左移右移异或

    左移

    • 1001011左移一位变为:100100110(这是在数字没有溢出的情况下,左移之后,会在末尾添加一个0)
    • parseInt('1001011',2) == 75
    • parseInt('10010110',2) == 150
    • 由此可见,左移一位(没有溢出),变为原来的2倍;2位就是4倍,以此类推
    左移

    数字溢出:指二进制的位数超过了系统指定的位数,一般系统最少是32位

    右移
    JavaScript中,右移分为有符号右移无符号右移

    • 无符号右移:去掉末尾的一位
    • 1001011左移一位变为:100101
    • parseInt('100101',2) == 37
    • 由此可见,右移一位等于原来的数除以2的整数商
    右移

    举一个有符号和无符号右移的例子

    有符号与无符号右移

    对应JavaScript代码

    -123 >> 4 == -8 (有符号右移)
    -123 >>> 4 === 268435448(无符号右移)
    

    总结:
    负数的无符号右移:取得补码,右移n位,最高位补0
    负数的有符号右移:取得补码,右移n位,最高位补1,然后再取这个补码的补码
    正数的有符号与无符号右移,结果都一样

    与操作

    都是1,结果才是1

    与操作

    或操作

    只要有一个是1,就等于1

    或操作

    异或

    只有符号位不同,才是1

    异或

    验证

    parseInt("1001011",2) | parseInt("1010100",2) // 95   "1011111"
    parseInt("1001011",2) & parseInt("1010100",2)  // 64 "1000000"
    parseInt("1001011",2) ^ parseInt("1010100",2)  // 31  "11111"
    

    相关文章

      网友评论

          本文标题:二进制

          本文链接:https://www.haomeiwen.com/subject/dcnzmqtx.html