我的不幸恰恰在于我缺乏拒绝的能力,
我害怕一旦拒绝别人,便会在彼此心里留下永远无法愈合的裂痕!——《人间失格》
目录
专业知识 | 程序猿的数学基础课 | 基础思想篇 | 1. 二进制
1.1 什么是二进制
1.1.1 进制的由来
公元 3 世纪左右,印度数学家(也有说法是阿拉伯人)发明了阿拉伯数字。阿拉伯数字由从 0 到 9 这样 10 个计数符号组成,并采取进位制法,高位在左,低位在右,从左往右书写。由于阿拉伯数字本身笔画简单,演算便利,因此它们逐渐在各国流行起来,成为世界通用的数字。
日常生活中, 我们广泛使用十进制计数法,也是基于阿拉伯数字的。
让我们来观察一个数字:2871
2871 = 2 * 1000 + 8 * 100 + 7 * 10 + 1
2871 = 2 * 10^3 + 8 * 10^2 + 7 * 10^1 + 1 * 10^0
其中 ^ 表示幂或次方运算。十进制的数位(千位、百位、十位等)全部都是 10^n 的形式。需要特别注意的是,任何非 0 数字的 0 次方均为 1。在这个新的表示式里,10 被称为十进制计数法的基数,也是十进制中“十”的由来。
1.1.2 二进制
明白了十进制,我们再试着用同样的思路来理解二进制,我们以数字110101为例。
1 * 2^5 + 1 * 2^4 + 0 * 2^3 + 1 * 2^2 + 0 * 2^1 + 1 * 2^0 = 53
十进制计数是使用 10 作为基数,那么二进制就是使用 2 作为基数,类比过来,二进制的数位就是 2^n 的形式。
1.2 计算机为什么使用二进制
1.2.1 计算机使用二进制与现代计算系统的硬件实现有关
- 组成计算机系统的逻辑电路通常只有两个状态,即开关的接通与断开。
- 断开的状态我们用“0”来表示,接通的状态用“1”来表示。由于每位数据只有断开与接通两种状态,所以即便系统受到一定程度的干扰时,它仍然能够可靠地分辨出数字是“0”还是“1”。因此,在具体的系统实现中,二进制的数据表达具有抗干扰能力强、可靠性高的优点。相比之下,如果用十进制设计具有 10 种状态的电路,情况就会非常复杂,判断状态的时候出错的几率就会大大提高。
1.2.2 二进制非常适合逻辑运算
逻辑运算中的“真”和“假”,正好与二进制的“0”和“1”两个数字相对应。逻辑运算中的加法(“或”运算)、乘法(“与”运算)以及否定(“非”运算)都可以通过“0”和“1”的加法、乘法和减法来实现。
1.3 二进制的位操作 (位运算)
位操作(位运算):就是直接对内存中的二进制位进行操作。
1.3.1 移位操作
1.3.2 逻辑操作
- 按位与 “&”
- 按位或 “|”
- 按位取反