二进制

作者: 椰果粒 | 来源:发表于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