什么是位运算?
位运算是计算机中进行二进制操作的一种方法。
它可以对二进制数的单个比特位进行操作,包括位移、按位与、按位或、按位异或、按位取反等。
位运算可以用于很多场景,例如:
-
对于需要对程序中的某一或几位进行操作时,比如需要将一个数的某一位设为1或者设为0,这时就可以使用按位运算。
- 在内存管理中,程序常常需要对内存地址进行位运算,以判断对齐、分页和分段等问题。
-
位运算还可以用于加密和解密算法中,提高运算效率并增加加密强度。
-
位运算可以进行逻辑推理,例如二进制数的“灰码编码”等,常用于工业自动化和数字信号处理领域等。
总之,位运算可以广泛应用于计算机领域的各个方面,特别是在处理二进制数据和优化性能时非常有用。常见的语言,比如 Python、C、Java 等都提供了丰富的位运算符,可以方便地进行位运算操作。
位运算有哪些?
按位与——“&”
按位与运算是一种位运算,通常用符号“&”表示。按位与的原理是对两个二进制数的每一位进行与运算,相同位上的数值进行与运算,的结果都是1,则结果位1,否则为0。具体来说,按位与操作的运算规则如下:
- 首先将两个二进制对其,使它们的位数相同。如果一个二进制数比另一个二进制数短,则在它左侧填充零直到位数相等。
- 对于每一位,进行按位与运算。按位与运算规则是:如果两位数字对应位都为1,则该位结果为1,否则为0。
- 将位运算结果组成一个新的二进制数,该二进制数就是原始两个二进制数的按位与结果。
举个🌰(例子)假设我们要计算两个二进制数的按位与结果(二进制数用空格分开以方便表示):
1101 1010
& 1011 0011
首先,我们将它们对齐:
1101 1010
& 1011 0011
-----------
然后,对每一位进行按位与运算,得到一下结果:
1 1 0 1 1 0 1 0
& 1 0 1 1 0 0 1 1
-------------------
1 0 0 1 0 0 1 0
因此,按位与运算的结果使 1001 0010,它的十进制十 146。
按位或——“|”
按位或运算也成为按位或,其符号通常为“|”,是一种常用的位运算。按位或的原理是对二进制的每一位进行或运算,如果相同位上的数值有一个为1,则两个按位或运算后的结果在此位上为1,否则为0。按位或的运算规则如下:
- 首先将两个二进制对其,使它们的位数相同。如果一个二进制数比另一个二进制数短,则在它左侧填充零直到位数相等。
- 对于每一位,进行按位或运算。按位与运算规则是 :对于两个二进制数的同一位,如果相同位上的数值有一个为1,则改为结果为1,否则为0。
- 将位运算结果组成一个新的二进制数,该二进制数就是原始两个二进制数的按位与结果。
举个🌰(例子)假设我们要计算两个二进制数的按位或结果(二进制数用空格分开以方便表示):
1101 1010
& 1011 0011
首先,我们将它们对齐:
1101 1010
& 1011 0011
-----------
然后,对每一位进行按位或运算,得到一下结果:
1 1 0 1 1 0 1 0
& 1 0 1 1 0 0 1 1
-------------------
1 1 1 1 1 0 1 1
因此,按位或运算的结果使 1111 10111,它的十进制十 251。
按位异或——“^”
按位异或运算符的符号通常为“^”,它也是一种位运算。按位异或的原理是:如果相同位上的数值不同时,则运算结果在此位上为1,否则为0。按位异或的运算规则如下:
- 首先将两个二进制对其,使它们的位数相同。如果一个二进制数比另一个二进制数短,则在它左侧填充零直到位数相等。
- 对于每一位,进行按位或运算。按位与运算规则是 :如果相同位上的数值不同时,则运算结果在此位上为1,否则为0。
- 将位运算结果组成一个新的二进制数,该二进制数就是原始两个二进制数的按位与结果。
举个🌰(例子)假设我们要计算两个二进制数的按位异或结果(二进制数用空格分开以方便表示):
1101 1010
& 1011 0011
首先,我们将它们对齐:
1101 1010
& 1011 0011
-----------
然后,对每一位进行按位异或运算,得到一下结果:
1 1 0 1 1 0 1 0
& 1 0 1 1 0 0 1 1
-------------------
0 1 1 0 1 0 0 1
因此,按位异或运算的结果使 0110 1001,它的十进制十 105。
按位取反——“~”
按位异或运算符的符号通常为“~”,它也是一种位运算。按位异或的原理是:如果相同位上的数值不同时,则运算结果在此位上为1,否则为0。按位异或的运算规则如下:
- 首先将两个二进制对其,使它们的位数相同。如果一个二进制数比另一个二进制数短,则在它左侧填充零直到位数相等。
- 对于每一位,进行按位或运算。按位与运算规则是 :如果相同位上的数值不同时,则运算结果在此位上为1,否则为0。
- 将位运算结果组成一个新的二进制数,该二进制数就是原始两个二进制数的按位与结果。
举个🌰(例子)假设我们要计算两个二进制数的按位异或结果(二进制数用空格分开以方便表示):
1101 1010
& 1011 0011
首先,我们将它们对齐:
1101 1010
& 1011 0011
-----------
然后,对每一位进行按位异或运算,得到一下结果:
1 1 0 1 1 0 1 0
& 1 0 1 1 0 0 1 1
-------------------
0 1 1 0 1 0 0 1
因此,按位异或运算的结果使 1111 10111,它的十进制十 89。