数学:计算机二进制复习
Contents
计算机中所有的信息最终都是以二进制 0 和 1 来表示。阅读计算机历史,了解这样的缘由主要是计算机系统硬件实现、符合逻辑运算。主要表现在二进制的数据表达具有抗干扰能力强、可靠性高的优点。所以,想了解这部分的内容,可以看看计算机历史相关书籍。
二进制和十进制的转换
10 被称为十进制计数法的基数,也是十进制中“十”的由来。这里先拿十进制举例,比如数字 2561,可以拆成:
以此类推,二进制就是使用 2 作为基数,比如二进制数字 11010,转换为十进制数字就是:
在 Python 语言中的十进制和二进制互换,也比较简单。
1 | # 二进制转十进制 |
1 | 26 |
二进制的位运算
二进制位运算,包括向左移位、向右移位、“或”、“与”、“异或”。
向左移位表示二进制 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 语言中的运算,分别是|(或运算)、&(与运算)、^(异或运算),左右移位是箭头表示,下面演示:
1 | # 向左移位 |
1 | 0b100 |
1 | # 向右移位 |
1 | 0b100 |
1 | print(bin(0b110 | 0b101),"或运算") |
1 | 0b111 或运算 |