程序员的数学基础课(二)二进制的操作

2021-07-15 10:36:18 浏览数 (1)

1.how&why 为什么计算机需要二进制?

计算机使用二进制和现代计算机系统的硬件实现有关。组成计算机系统的逻辑电路通常只有两个状态,即开关的接通与断开。

断开的状态我们用“0”来表示,接通的状态用“1”来表示。由于每位数据只有断开与接通两种状态,所以即便系统受到一定程度的干扰时,它仍然能够可靠地分辨出数字是“0”还是“1”。因此,在具体的系统实现中,二进制的数据表达具有抗干扰能力强、可靠性高的优点。

相比之下,如果用十进制设计具有 10 种状态的电路,情况就会非常复杂,判断状态的时候出错的几率就会大大提高。

另外,二进制也非常适合逻辑运算。逻辑运算中的“真”和“假”,正好与二进制的“0”和“1”两个数字相对应。逻辑运算中的加法(“或”运算)、乘法(“与”运算)以及否定(“非”运算)都可以通过“0”和“1”的加法、乘法和减法来实现。

2. 二进制的操作

二进制的与电路中的与非门有一定联系,主要有以下几种位运算, 左移动,右移动(逻辑右移动、 算数右移动)、或运算、 与运算、 异或运算。

操作符号解释如下表:

运算符

名称

描述

&

AND

如果两位都是 1 则设置每位为 1

|

OR

如果两位之一为 1 则设置每位为 1

^

XOR

如果两位只有一位为 1 则设置每位为 1

~

NOT

反转所有位

<<

零填充左位移

通过从右推入零向左位移,并使最左边的位脱落。

>>

有符号右位移

通过从左推入最左位的拷贝来向右位移,并使最右边的位脱落。

>>>

零填充右位移

通过从左推入零来向右位移,并使最右边的位脱落。

实例

操作

结果

等同于

结果

5 & 1

1

0101 & 0001

1

5 | 1

5

0101 | 0001

101

5 ^ 1

4

0101 ^ 0001

100

~ 5

10

~0101

1010

5 << 1

10

0101 << 1

1010

5 >> 1

2

0101 >> 1

10

5 >>> 1

2

0101 >>> 1

10

ps: 在java 的二进制中首位字符表示的是一个符号位,来表示整数or 负数,所以在右位移操作时存在一个有符号位移操作。

0 人点赞