📅  最后修改于: 2023-12-03 15:09:08.939000             🧑  作者: Mango
当我们需要获取一个数字中的特定位时,需要用到位运算。以下是常用位运算符:
| 运算符 | 描述 | | ------ | --------------------------------------------------------- | | & | 如果同时存在于两个操作数中,结果为1,否则为0。 | | | | 如果存在于任意一个操作数中,结果为1,否则为0。 | | ^ | 如果同时仅存在于一个操作数中,结果为1,否则为0。 | | ~ | 每一位取反,0变为1,1变为0。 | | << | 左移运算符,将第一个操作数向左移动指定位数。空出的位补0。| | >> | 右移运算符,将第一个操作数向右移动指定位数。空出的位补0。|
为了获得一个数字中某一特定位的值,请首先要将这个数右移该位数,再通过按位与运算取出最低位的值。
以下是一个JavaScript函数示例,该函数获取数字num的从右往左第n位的二进制位(从0开始计数):
function getBit(num, n) {
return (num >> n) & 1;
}
要使用这个函数,只需将要检索的数字作为第一个参数传递,要检索的位数(从0开始计数)作为第二个参数传递。以下是一个示例:
getBit(5, 0); // 1 - 返回二进制位下标0的值,也就是1
getBit(5, 1); // 0 - 返回二进制位下标1的值,也就是0
getBit(5, 2); // 1 - 返回二进制位下标2的值,也就是1
为了修改一个数字中某一特定位的值,请使用位运算符。可以将特定位设置为1或0,或将其保持不变。
以下是一个JavaScript函数示例,该函数将数字num的从右往左第n位的二进制位修改为指定的值(从0开始计数):
function setBit(num, n, value) {
if (value) {
return num | (1 << n);
} else {
return num & ~(1 << n);
}
}
要使用这个函数,只需将要修改的数字作为第一个参数传递,要修改的位数(从0开始计数)作为第二个参数传递,以及将要设置的新值(数字1或0)作为第三个参数传递。以下是一个示例:
setBit(5, 0, 0); // 4 - 将2进制的0101变成0100
setBit(5, 1, 1); // 7 - 将2进制的0101变成0111
setBit(5, 2, 0); // 1 - 将2进制的0101变成0001