js中的位运算

如题所述

第1个回答  2022-06-07

在了解位运算之前, 必须先了解一下什么是原码, 反码和补码, 以及二进制与十进制的转换.

原码
一个数在计算机中是以二进制的形式存在的, 其中第一位存放符号, 正数为0, 负数为1. 原码就是用第一位存放符号的二进制数值. 例如2的原码为00000010, -2的原码为10000010

反码
正数的反码是它本身, 负数的反码是在其原码的基础上, 符号位不变, 其余各位取反.

可见如果一个反码表示的是负数, 并不能直观的看出它的数值, 通常要将其转换成原码再计算

补码
正数的补码是它本身, 负数的补码是在其原码基础上, 符号位不变, 其余各位取反, 最后+1. (即负数的补码为在其反码的基础上+1)

可见对于负数, 补码的表示方式也是让人无法直观的看出其数值的, 通常也需要转换成原码再计算.

正整数十进制转二进制
正整数的十进制转二进制的方法为将一个十进制数除以2, 得到的商再除以2, 以此类推知道商为1或0时为止, 倒序取得除得的余数, 即为转换所得的二进制数.

负整数十进制转二进制
负整数的十进制转二进制, 先将该负整数对应的正整数转为二进制, 然后对其取反再+1. 即补码的形式

十进制小数转二进制
十进制小数转二进制的方法为"乘2取整", 对十进制的小数部分乘2, 得到的整数部分即是相应的二进制码数, 然后继续对得到的小数部分乘2, 如此不断重复, 直到小数部分为0或达到精度要求为止. 顺序取得每次的整数部分, 即是该十进制小数的二进制表示.

按位运算符有6个
&: 按位与
|: 按位或
^: 按位异或
~: 按位取反
>>: 右移
<<: 左移

将运算数以二进制表示, 对应位都为1, 则结果为1, 否则为0.

使用场景示例:
判断一个数是奇数还是偶数

奇数的二进制码的最后一位数肯定是1, 而1只有最后一位为1, 按位与运算后, 结果肯定只有最后一位数是1. 而偶数的二进制表示的最后一位数是0, 和1进行按位与运算, 结果的所有位都是0.

将运算数以二进制表示, 对应位有一个为1, 则结果为1, 否则为0.

使用场景示例:
对浮点数向下求整

其实浮点数是不支持位运算的, 所以会先把小数位丢弃, 然后以整数进行位运算, 而任何数与0进行按位或操作, 结果都是它本身, 就好像是对浮点数向下求整.

将运算数以二进制表示, 对应位相同为0, 相异为1.
异或满足交换律和结合律, 数字与它本身进行异或操作, 得到0; 数字与0进行异或操作, 得到它本身.

使用场景示例:
交换两个变量数字的值

将操作数转换为二进制数, 然后按位求反.

浮点数是不支持位运算的,所以会先直接去除小数部分,转成整数再进行位运算,就好像是对浮点数向下求整.
~~可以进行类型转换,位运算会默认将非数字类型转换成数字类型再进行运算 (转换结果为整数 直接去除小数部分)

使用场景示例:
类型转换

移位运算符将操作数转换成二进制, 然后向左或向右移动, 超过的位丢弃, 空出的位补0.

使用场景示例:
类型转换

任何小数 把它 >> 0可以取整
如3.14159 >> 0 = 3;
其默认将非数字类型的转换为数字类型再做运算的性质与 ~~ , | 0 一样

js的&和|是什么关系?
在JS“&&”和“||”是逻辑运算符;“&”和“|”是位运算符。1、运算表达的不同 只要“||”前面为false,不管“||”后面是true还是false,都返回“||”后面的值。只要“||”前面为true,不管“||”后面是true还是false,都返回“||”前面的值。JavaScript中的位运算符:“|”运算方法:两个位...

js中的位运算
其实浮点数是不支持位运算的, 所以会先把小数位丢弃, 然后以整数进行位运算, 而任何数与0进行按位或操作, 结果都是它本身, 就好像是对浮点数向下求整.将运算数以二进制表示, 对应位相同为0, 相异为1. 异或满足交换律和结合律, 数字与它本身进行异或操作, 得到0; 数字与0进行异或操作, 得...

js 运算符^是什么意思为什么1^3结果是2
一、js 运算符^意思:是位运算符,为异或运算。二、1^3结果是2的解释如下:(1)因为:1的二进制表达为“0001”。(2)而3的二进制表达为“0011”。(3)当1^3即运用异或运算,运算后的结果是“0010”,转换为十进制之后,即为“2”。因此,得出结论:1^3结果是2。

重温js——位运算
运算过程如下:我们知道,js中的数字默认是有符号的。有符号的32位二进制的最高位也就是第一位数字代表着正负,1代表负数,0代表整数。那到底11111111111111111111111111111110等于多少呢?最高位为1代表负数,负数的二进制转化为十进制:符号位不变,其他位取反加1。取反之后为10000000000000000000000000000001,...

JS位运算符
因为是有符号的运算,所以这里不再适用上一小节说的js的特殊处理。先将-666转换为二进制。即-666的二进制形式为 1111 1111 1111 1111 1111 1101 0110 0110 ,然后对其进行有符号右移位运算 移位后得到的值为 0001 1111 1111 1111 1111 1111 1010 1100 ,转成十进制为536870828。 是不是超级...

&=是什么意思
“=”是JavaScript赋值运算符,意思是将左边变量与右操作数的值按位与。如,a=b,相当于a=ab。等号“=”就是赋值用的。而是JavaScript的位运算符,是按位与的意思,就是当两个操作数的相应位都为1时,该位的结果为1,否则为0。JavaScript(缩写为JS)是一种高级的、多范式、解释型的编程语言,是...

js ~~符号是什么意思??
~是按位取反运算,~~是取反两次。~~的作用是去掉小数部分,因为位运算的操作值要求是整数,其结果也是整数,所以经过位运算的都会自动变成整数。例如:按位取反 如 unsigned char a=1;二进制为 00000001 a=~a;现在二进制为11111110

运算符号有哪些js
javascript 具有全范围的运算符,包括算术、逻辑、位以及赋值运算符。此外还有其他一些运算符。计算 逻辑 位运算 赋值 杂项 描述 符号 描述 符号 描述 符号 描述 符号 描述 符号 负值 - 逻辑非 ! 按位取反 ~ 赋值 = 删除 delete 递增 ++ 小于 < 按位左移 << 运算赋值 oP= typeof 运算符 type...

...运算符 – 逻辑、比较、三元和更多 JS 运算符
JavaScript中的运算符按照功能分为七类:算术运算符、赋值运算符、比较运算符、逻辑运算符、三元运算符、typeof运算符和按位运算符。让我们逐一了解它们。1. 算术运算符这些运算符用于执行基本的数学运算,如加减,适用于与数字类型数据交互,如同计算器一样。例如,你可以直接对值进行加法操作:x += y...

js中的 +=符号是啥意思
~是按位取反运算,~~是取反两次。~~的作用是去掉小数部分,因为位运算的操作值要求是整数,其结果也是整数,所以经过位运算的都会自动变成整数。例如:按位取反 如 unsigned char a=1;二进制为 00000001 a=~a;现在二进制为11111110

相似回答
大家正在搜