js位运算
2023-12-29 14:37:21
-
按位与(&):
- 描述:对两个相应的二进制位执行 AND 操作。只有两个对应的位都是1时,结果位才是1。
- 示例:
let result = 5 & 3; // 0101 & 0011 = 0001 (1)
-
按位或(|):
- 描述:对两个相应的二进制位执行 OR 操作。只要两个对应的位中有一个是1,结果位就是1。
- 示例:
let result = 5 | 3; // 0101 | 0011 = 0111 (7)
-
按位异或(^):
- 描述:对两个相应的二进制位执行异或操作。当两个对应的位不相同时,结果位为1。
- 示例:
let result = 5 ^ 3; // 0101 ^ 0011 = 0110 (6)
-
按位非(~):
- 描述:对一个二进制数的每个位执行取反操作,即0变为1,1变为0。
- 示例:
let result = ~5; // ~0101 = 1010 (-6 in decimal)
-
左移(<<):
- 描述:将一个数的所有位向左移动指定的位数,右侧用0填充。
- 示例:
let result = 5 << 1; // 0101 << 1 = 1010 (10)
-
右移(>>):
- 描述:将一个数的所有位向右移动指定的位数,左侧用原来的最高位填充(有符号右移)。
- 示例:
let result = 5 >> 1; // 0101 >> 1 = 0010 (2)
-
无符号右移(>>>):
- 描述:将一个数的所有位向右移动指定的位数,左侧用0填充(无符号右移)。
- 示例:
let result = -5 >>> 1; // 1111111111111111111111111111111011 >>> 1 = 0111111111111111111111111111111101 (2147483645)
这些位运算符在特定的情况下很有用,例如优化一些算法或处理特殊的位级数据。然而,它们通常在普通的业务逻辑中用得较少。
1. 加法:
function add(a, b) {
while (b !== 0) {
let carry = a & b;
a = a ^ b;
b = carry << 1;
}
return a;
}
// 示例
let sum = add(5, 3);
console.log(sum); // 输出 8
这里使用了位运算中的异或(^)和与(&)操作来模拟加法过程。循环执行,直到进位为0。
2. 减法:
function subtract(a, b) {
// 取b的补码并加1
b = add(~b, 1);
return add(a, b);
}
// 示例
let difference = subtract(5, 3);
console.log(difference); // 输出 2
在减法中,我们首先取b的补码(使用取反和加1的方式),然后将它与a相加
文章来源:https://blog.csdn.net/m0_47999208/article/details/135288557
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!