计算机工程师眼中的位运算
2023-10-12 20:14:27
在上一篇文章中,我们深入探讨了 IEEE-754 标准和浮点数的存储,揭开了 0.1 + 0.2 不等于 0.3 的秘密。现在,让我们继续我们的探索之旅,深入研究 JavaScript(JS)中的二进制运算符,从计算机工程师的角度揭开位运算的奥秘。
在 IEEE-754 标准的探讨中,我们了解了移码(双精度浮点数的阶码右移 1023 位),它是一种二进制运算。二进制运算是一种计算机底层操作,它直接处理二进制数字。在 JS 中,提供了一系列二进制运算符,让我们可以执行这些操作。
位运算符
JS 中有六个位运算符:
&
按位与|
按位或^
按位异或~
按位非<<
左移>>
右移
按位与
按位与运算符 (&) 对两个数字的二进制位进行比较,如果两个位都为 1,则结果为 1,否则为 0。例如:
10 (二进制:1010) & 5 (二进制:0101) = 4 (二进制:0100)
按位或
按位或运算符 (|) 类似于按位与运算符,但当两个位中至少一个为 1 时,结果为 1。例如:
10 (二进制:1010) | 5 (二进制:0101) = 15 (二进制:1111)
按位异或
按位异或运算符 (^) 与按位与运算符类似,但当两个位不同时,结果为 1。例如:
10 (二进制:1010) ^ 5 (二进制:0101) = 11 (二进制:1011)
按位非
按位非运算符 (~) 对一个数字的每个二进制位进行取反,0 变为 1,1 变为 0。例如:
~10 (二进制:1010) = -11 (二进制:11101)
左移
左移运算符 (<<) 将一个数字的二进制位向左移动指定位数,高位用 0 填充。例如:
10 (二进制:1010) << 2 = 40 (二进制:101000)
右移
右移运算符 (>>) 将一个数字的二进制位向右移动指定位数,符号位不变(算术右移)或用 0 填充(逻辑右移)。例如:
10 (二进制:1010) >> 2 = 2 (二进制:0010)
计算机工程师的视角
计算机工程师对位运算符有着独特的见解。他们将位运算视为一种在底层操作计算机数据和控制硬件的强大工具。位运算符允许精确控制二进制数据,这是构建复杂系统和优化性能的关键。
例如,在图像处理中,位运算符可以用于调整颜色值或提取图像的特定部分。在网络编程中,它们可以用于解析 IP 地址或创建子网掩码。在加密中,它们用于创建和解密消息。
深入探索
要深入了解计算机工程师眼中的位运算,可以研究以下资源:
通过研究这些资源,你可以加深对位运算符在计算机底层操作中的应用的理解。