首页 > 其他分享 >开发过程中常见的6种位运算和注意事项

开发过程中常见的6种位运算和注意事项

时间:2024-09-10 12:20:49浏览次数:9  
标签:console 运算 种位 二进制 let 注意事项 按位 log

位运算是直接对二进制位进行操作的一种运算。在 JavaScript 中,位运算符包括 &(按位与)、|(按位或)、^(按位异或)、~(按位非)、<<(左移)和 >>(右移)等。下面我将详细介绍这些位运算符,并给出相应的代码示例。

1. 按位与(&)

按位与运算符对两个数的每一位执行与操作。如果两个相应的二进制位都为 1,则结果为 1,否则为 0。

示例代码:

let a = 5;  // 二进制: 101
let b = 3;  // 二进制: 011
console.log(a & b);  // 输出: 1 (二进制: 001)

2. 按位或(|)

按位或运算符对两个数的每一位执行或操作。如果两个相应的二进制位至少有一个为 1,则结果为 1,否则为 0。

示例代码:

let a = 5;  // 二进制: 101
let b = 3;  // 二进制: 011
console.log(a | b);  // 输出: 7 (二进制: 111)

3. 按位异或(^)

按位异或运算符对两个数的每一位执行异或操作。如果两个相应的二进制位值不同,则结果为 1,否则为 0。

示例代码:

let a = 5;  // 二进制: 101
let b = 3;  // 二进制: 011
console.log(a ^ b);  // 输出: 6 (二进制: 110)

4. 按位非(~)

按位非运算符对一个数的每一位执行非操作。如果该位为 1,则结果为 0,如果该位为 0,则结果为 1。注意,在 JavaScript 中,按位非运算的结果是带符号的 32 位整数。

示例代码:

let a = 5;  // 二进制: 101
console.log(~a);  // 输出: -6 (二进制: -(000...0110),注意这里省略了前面的多个0)

5. 左移(<<)

左移运算符将一个数的所有位向左移动指定的位数。左移 n 位相当于将该数乘以 2^n。

示例代码:

let a = 5;  // 二进制: 101
console.log(a << 1);  // 输出: 10 (二进制: 1010,相当于 5 * 2^1)

6. 右移(>>)

右移运算符将一个数的所有位向右移动指定的位数。右移 n 位相当于将该数除以 2^n 并向下取整。

示例代码:

let a = 10;  // 二进制: 1010
console.log(a >> 1);  // 输出: 5 (二进制: 101,相当于 10 / 2^1 向下取整)

请注意,JavaScript 中的位运算符处理的是 32 位有符号整数,因此对于非常大的数或非常小的数,可能会出现意外的结果。在使用位运算时,请务必注意数值范围。

与0、1的运算

当一个数与 1 进行按位或运算时,实际上这个操作并不会改变原数的值(针对整数而言)。这是因为按位或运算会比较每一个二进制位,只有当两个比较的位不同时,结果才为 1;否则结果为 0。而与 1 进行按位或运算时,只有原数的该位为 0 时,结果才会变为 1,否则保持不变。

示例代码:

let a = 5;  // 二进制: 0101 (假设我们只考虑低4位)
console.log(a | 1);  // 输出: 5 (二进制: 0101,因为 5 的最低位已经是 1,所以与 1 进行按位或运算后值不变)

let b = 4;  // 二进制: 0100
console.log(b | 1);  // 输出: 5 (二进制: 0101,因为 4 的最低位是 0,与 1 进行按位或运算后变为 1)

但是,如果你考虑的是浮点数,情况就会有所不同。JavaScript 会将浮点数转换为 32 位有符号整数(通过截断小数部分)后再进行按位运算。因此,与 1 进行按位或运算实际上只会影响整数部分的最右边一位。

示例代码:

let c = 5.7;  // 浮点数
console.log(c | 1);  // 输出: 5 (因为 5.7 被转换为整数 5 后进行按位或运算)

let d = 4.2;  // 浮点数
console下console.log(d | 1);  // 输出: 5 (因为 4.2 被转换为整数 4 后进行按位或运算,结果变为 5)

总的来说,当一个整数与 1 进行按位或运算时,只有在该整数的最低位为 0 时,结果才会改变;对于浮点数,与 1 进行按位或运算实际上只影响其整数部分的最右边一位。

当一个数与 0 进行按位或运算时,JavaScript 会自动将该数转换为一个 32 位的整数,并舍弃小数部分。这种方法在某些情况下可以作为一种快速向下取整的技巧。

标签:console,运算,种位,二进制,let,注意事项,按位,log
From: https://blog.csdn.net/lalala8866/article/details/142095524

相关文章

  • python和C++中的运算符的一一对应
    在Python和C++中,许多运算符是相似的,因为它们都遵循许多基础的编程概念,比如算术运算、逻辑运算、位运算等。然而,也存在一些差异,尤其是在一些高级特性上,比如Python的动态类型和C++的静态类型。以下是一些常见的运算符在两个语言中的对应情况:算术运算符PythonC++描述++加法......
  • PLC结构化文本(ST)——接口指针转换运算符(__QUERYPOINTER)
    PLCStructuredTextObjectOrientedProgrammingPLC结构化文本(ST)——接口指针转换运算符(__QUERYPOINTER)__QUERYPOINTER运算符__QUERYPOINTER是IEC61131-3的扩展,该运算符允许在运行时将功能块的接口引用转换为指针。返回值BOOL类型:True表示转换成功,Flase表示转换失败。出于......
  • 大整数运算
    首先是遇到了1017A除以B,稀里糊涂地复制了别人的答案就将其抛在脑后(偶然事件),紧接着就遇到了1022D进制的A+B,这时突然记起学习要有打破砂锅问到底的精神,根本不是因为发现这个问题逃避不了,开始了对这个知识点的研究学习。取余运算取余就是取模,可以将其转换为对字符串中的最低数......
  • Java基础—运算符篇(从0到1完整详解,附有代码+案例)
    文章目录运算符分类:2.1.算术运算符2.1.1基本算数运算2.1.2复合算数运算2.1.3类型转换2.1.4“+”的三种情况2.2自增自减运算符2.3赋值运算符2.4关系运算符2.5逻辑运算符2.6短路逻辑运算符2.7三元运算符2.8运算的优先级运算符分类:赋值运算符:=算术运算符:+-......
  • 南沙信奥赛C++陈老师解一本通题: 1326:【例7.5】 取余运算(mod)
    ​【题目描述】【输入】输入b,p,k的值。【输出】【输入样例】2109【输出样例】2^10mod9=7 #include<iostream>#include<stdlib.h>usingnamespacestd;longlongb,p,k,ans=1;intmain(){ cin>>b>>p>>k; for(inti=1;i<=p;i++) { ans*=b;......
  • 【算法笔记】位运算详解
    0.前言突然想到位运算是个好东西,就来水一波文章了……注意:我把能想到的有关位运算的所有内容都放进来了,所以篇幅较长,请谅解!若有写的不清楚或者不够详细的地方欢迎在评论区补充,谢谢支持!本文中参考代码均使用C++编写。废话不多说,下面步入正题。1.基本运算有一定基础的可以......
  • Scala的基本运算
    Scala是一种多范式的编程语言,它支持多种类型的运算,包括算术运算、关系运算、逻辑运算、位运算以及赋值运算。以下是这些基本运算的简要概述: 算术运算:基本的算术运算符包括加法(+)、减法(-)、乘法(*)、除法(/)和取模(%)。这些运算符可以对数值类型进行操作。例如,3+2结果为5,3-2......
  • Vue3:<Teleport>传送门组件的使用和注意事项
    你好,我是沐爸,欢迎点赞、收藏、评论和关注。Vue3引入了一个新的内置组件<Teleport>,它允许你将子组件树渲染到DOM中的另一个位置,而不是在父组件的模板中直接渲染。这对于需要跳出当前组件的DOM层级结构进行渲染的场景非常有用,比如模态框(Modal)、下拉菜单(Dropdown)或者工......
  • 二,PyCharm软件的使用,Python运算符,变量的介绍与运用,以及本章综合测试
    学习:知识的初次邂逅复习:知识的温故知新练习:知识的实践应用目录一,本章知识简介二,PyCharm软件的使用1,修改背景颜色和字体大小2,软件界面的使用3,PyCharm的常用快捷键三,Python运算符1,Python中常见的运算符有哪些?2,算术运算符如何运用?3,赋值运算符如何运用?4,......
  • Java中的整数移位运算符
    对于<<,>>两种运算符,可以这样说:\(a<<b=a*2^b\)\(a>>b=a/2^b\)但是对于>>>...不好说了。这些位运算在计算机中怎样运算的?大家都知道,整数在计算机中是以二进制存储的:\(0=(0)_2\)\(4=(100)_2\)\(8=(1000)_2\)\(20=(10100)_2\)\(666=(1010011010)_2\)左移(<<......