计算机二进制复习

Python面面观

共 1763字,需浏览 4分钟

 · 2021-03-30

复习一下二进制的内容。

计算机中所有的信息最终都是以二进制 0 和 1 来表示。阅读计算机历史,了解到这样的缘由主要是计算机系统硬件实现、符合逻辑运算。主要表现在二进制的数据表达具有抗干扰能力强、可靠性高的优点。想了解更多这部分内容,可以看看计算机历史相关书籍。

二进制和十进制的转换

10 被称为十进制计数法的基数,也是十进制中“十”的由来。这里先拿十进制举例,比如数字 2561,可以拆成:

以此类推,二进制就是使用 2 作为基数,比如二进制数字 11010,转换为十进制数字就是:

在 Python 语言中的十进制和二进制互换,也比较简单。

# 二进制转十进制
print(int("11010",2,))
print('-'*20)

# 十进制转二进制。0b的意思表示二进制
print(bin(26))
26
--------------------
0b11010

二进制位运算

二进制位运算,包括向左移位、向右移位、“或”、“与”、“异或”。

向左移位表示二进制 11010 向左移一位,就是在末尾添加一位 0,因此 11010 就变成了 110100。向右移位表示二进制 11010 向右移一位,就是去掉末尾一位,因为二进制最前面的 0 可以省略。因此 11010 就变成了 1101。

逻辑“或”的意思是,参与操作的位中只要有一个位是 1,那么最终结果就是 1,也就是“真”。如果将二进制 110101 和 100011 的每一位对齐,进行按位的“或”操作,就会得到 110111。

图:数据科学家-黄申

“与”的意思是,参与操作的位中必须全都是 1,那么最终结果才是 1(真),否则就为 0(假)。如果将二进制 110101 和 100011 的每一位对齐,进行按位的“与”操作,就会得到 100001。

图:数据科学家-黄申

逻辑“异或”和“或”有所不同,它具有排异性,也就是说如果参与操作的位相同,那么最终结果就为 0(假),否则为 1(真)。所以,如果要得到 1,参与操作的两个位必须不同,这就是此处“异”的含义。将二进制 110101 和 100011 的每一位对齐,进行按位的“异或”操作,可以得到结果是 10110。

图:数据科学家-黄申

在 Python 语言中的运算,分别是|(或运算)、&(与运算)、^(异或运算),左右移位是箭头表示,下面演示:

# 向左移位
print( bin(4))  
print('-'*20)
print (bin(8) ) 
print('-'*20)

# 将4的二进制向左移位一次即末尾添加一个0
print (4<<1)
0b100
--------------------
0b1000
--------------------
8
# 向右移位
print (bin(4))  
print('-'*20)
print (bin(2))  
print('-'*20)
# 将4的二进制向右移位一次即末尾删除一位
print (4>>1)
0b100
--------------------
0b10
--------------------
2
print(bin(0b110 | 0b101),"或运算")
print('-'*20)
print(bin(0b110 & 0b101),"与运算")
print('-'*20)
print(bin(0b110 ^ 0b101),"异或运算")
0b111 或运算
--------------------
0b100 与运算
--------------------
0b11 异或运算

Reference

  1. 黄申《程序员的数学基础课》
浏览 44
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报