首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

「硬核JS」令你迷惑的运算

写在前面 今天,我们来学习一下 JS 操作符中的操作符 在 JS 这门语言的标准里,描述了一组可以用来操作数据值的操作符,其中包括 数学操作符、操作符、关系操作符、相等操作符、布尔操作符、条件操作符以及...,这种格式用 64 二进制存储数值,64 也就是 64 比特(bit),相当于 8 个字节,其中 0 到 51 存储数字(片段),52 到 62 存储指数,63 存储符号 而在 JS 运算中,并不会用...二进制整数就可以,因为 64 存储格式是不可见的,但是也正是因为后台这个默认转换操作,给 JS 这门语言产生了一个副作用,即特殊值 NaN 和 Infinity 在位运算中都会直接被当作 0 来处理...,如下所示 ~~3.14 == 3 很多人知道这样可以取整,但是由于不知道具体是为什么而不敢用,所以我们来解释下为什么它为什么可以取整 上面我们说过,在 JS 运算中,并不会用 64 来计算,它会先在后台把值转换为...~x == (-x) - 1 ~~x == -((-x) - 1) -1 == -(-x) + 1 -1 == x 所以运算中的双非 ~~ 即可取整,此取整是完全忽略小数部分 按 AND(&

1.7K20

取反~运算_按或按异或运算

取反~运算 首先我们来看按取反的概念 按取反运算符:对数据的每个二进制取反,即把0变成1,把1变成0....即~x=-x-1 这里按照定义 9的二进制为00001001 其按取反为11110110 结果为-10 这个过程没有任何问题,但是如果忘记了负数的二进制表达方式,就会对这个结果产生疑问,为什么11110110...理解按取反的关键是理解11110110为什么表示-10,也就是负数的二进制表达方式。 现在计算机普遍使用补码表示负数。 知道补码,求源码的方式是:值取反再加1。...补码的第一符号决定了源码的正负,第一为0源码为正,第一为1源码为负。 现在我们可以理解上面那个例子,9按取反后得到11110110,其第一为1,源码为负值。

1.7K10

运算的优化应用

运算符用来对二进制操作,共有七类运算符,如下: 符号 含义 & 按 | 按或 ^ 按异或 ~ 按取反 >> 右移 << 左移 >>> 无符号右移动 左移( << ) 整体左移,右边空出位补零...1 = -3) 非( ~ ) 每一进行比较,按取反(符号也要取反)(~ -4 = 3) 异或( ^ )每一进行比较,相同为0,不同为1(^ -4 = -3) 2.2 *<< 乘法运算,可以换算成运算实现...移位快,只有一次寻址,逻辑运算和写操作,按需要两次寻址,一次逻辑运算和一次写。...2.3 />> 除法运算,可以换算成运算实现 a/(2^n) 等价于 a >> n java中 > >>>都是针对补码来进行的。...2.4 %& 取模运算,可以换算成运算实现 a % (2^n) 等价于 a &(2^n-1) 示例: a=25,n=3 a 二进制 a % 8 = 1 a &(7) = 1 25 二进制 11001

20620

运算

运算分为2个大类 逻辑运算 运算符为:&、|、^、~ 。分别读作:或、异或、按取反 位移位运算 运算符为:>。...分别读作:左移、右移 位于 &(一0则0) 将两个十进制数转为二进制,将此两个二进制转换为列竖式,运算时两个位数任意一个是0则此是0,有1个1则是1。然后将结果转为十进制。...10 运算二进制结果是:1000 二进制的1000 转为十进制是:8 12&10 -------------》 8 或| (双0则0) 将十进制数转为二进制,将2个二进制的数转换为列竖式,两个位数都是...被删除的不补) 1 转为十进制是 :1 12 >> 3 -------------》 1 利用运算表示状态 在Mysql我们可以利用字段来表示用户的某个属性或状态,但是如果用户有大量的状态...如果不想数据表存在大量的数据,我们可以使用运算,用一个数字的字段表示用户的状态。 思路:定义一个字段 数字类型 其数字表示了用户的多个状态!

1.3K20

运算

符号 含义 作用 & 按 "a&b"按二进制进行“运算。如果两个相应的二进制位数字都为1,则该位的结果为1;否则为0。 | 按或 "a|b"按二进制进行“或”运算。...复合运算符 ​ 运算符也可以赋值运算符组成复合运算符。...例如 a&=b 相当于a=a&b 优先级 (1)、移位运算符在乘除加减后面,在比较运算符前面 (2)、按、或、异或在比较运算符后面,在逻辑、或前面 建议多用括号 应用、技巧 判断奇偶性 将二进制转成十进制的过程是一个按权值进行累加的过程...若是类似这样的二进制101000010100001010000 减1,则会变成100111110011111001111 将原值减1后的进行按运算,则能将最后一的1消去。...【习题】 枚举子集 判断x二进制的第j是否为1 将x的第j右移到最右边,1进行运算,若第j为1,结果为1,否则为0。

82210

运算

&(按) 双目运算符,对参加运算的两个操作数按二进制进行逻辑运算。如果两个相应都是1,则该位运算的结果为1,否则为0。...即 0&0 = 0 1&1 = 1 1&0 = 0 比如 00001011 & 00001010 --------------------- 00001010 按""运算常用来把一个数的某些清...例如把a的低四置1,高四不变,可作a|00001111运算 ^按异或运算 双目运算符,对参加运算的两个数按进行异或运算。当两个相应位相异时,该位的运算结果为1,否则为0。...逻辑运算逻辑运算的最大区别是前者得到的是0或1,而后者得到的是整型数据 优先级 单目逻辑运算符的优先性单目算数运算符、单目逻辑运算符、自增自减运算符同级别。...而双目逻辑运算符中,&优先于^ ^优先于| 自反赋值运算运算符和赋值运算符可以组成自反赋值运算符,共有五种,分别是>>=、<<=、&=、|=、^=。

18420

运算

一、运算取反(NOT)~ 取反是一元运算符,对一个二进制数的每一执行逻辑反操作。使数字1成为0,0成为1。...NOT 0111(十进制7) = 1000(十进制8) 值得注意的是此操作符”逻辑非(!)”...例如 0101(十进制5) OR 0011(十进制3) = 0111(十进制7) 这一操作符需要与逻辑或运算符( )区别开来 按(AND)& 按处理两个长度相同的二进制数...例如: 0101 AND 0011 = 0001 按异或(XOR)^ 按异或运算,对等长二进制模式按或二进制数的每一执行逻辑异按或操作。...例如 0101 XOR 0011 = 0110 二、移位 移位是一个二元运算符,用来将一个二进制数中的每一全部都向一个方向移动指定位,溢出的部分将被舍弃,而空缺的部分填入一定的值

74620

运算

&运算 &运算通常用于二进制取操作,例如一个数 & 1 的结果就是取二进制的最末位。这可以用来判断一个整数的奇偶,二进制的最末位为 0 表示该数为偶数,最末位为 1 表示该数为奇数。 2....^运算 ^运算通常用于对二进制的特定一进行取反操作,因为异或可以这样定义:异或 0 都不变,异或 1 则取反。...«运算 a « b 就表示把 a 转为二进制后左移 b (在后面添 b 个 0)。...因此程序中乘以 2 的操作请尽量用左移一来代替。 定义一些常量可能会用到«运算。你可以方便地用 1 «16 – 1 来表示 65535。...6. »运算 和«相似,a » b 表示二进制右移 b (去掉末 b ),相当于 a 除以 2 的 b 次方(取整)。我们也经常用» 1 来代替 div 2,比如二分查找、堆的插入操作等等。

1.5K20

运算

运算   运算是把数字用二进制表示之后,对每一上0或者1的运算。   理解运算的第一步是理解二进制。二进制是指数字的每一都是0或者1.比如十进制的2转化为二进制之后就是10。...其实二进制的运算并不是很难掌握,因为运算总共只有5种运算、或、异或、左移、右移。...按(&)其功能是参与运算的两数各对应的二进制位相与。只有对应的两个二进制均为1时,结果位才为1,否则为0 。参与运算的数以补码方式出现。...总结:把一个整数减去1之后再和原来的整数做运算,得到的结果相当于是把整数的二进制表示中的最右边一个1变成0 。...解决方法:一个整数如果是2的整数次方,那么它的二进制表示中有且只有一是1,而其它所有都是0 。 根据前面的分析,把这个整数减去1后再和它自己做运算,这个整数中唯一的1就变成0了。 解答:!

92280

运算理解常用场景

C语言提供了六种运算符: 运算符    &    |    ^    ~    > 说明    按    按或    按异或    取反    左移    右移 按运算...例如1&1为 1,0&0为 0,1&0也为 0,这和逻辑运算符&&非常类似。 常用场景: 按运算通常用来对某些清 0,或者保留某些。...清零(将一个单元0进行运算结果为零) 取一个数指定位为0(例如置X=1010 1101的高四置0, 则将X & 0xF得到0000 1101)。...使特定位翻转找一个数,对应X要翻转的各位,该数的对应为1,其余为零,此数X对应异或即可。...0异或得到原值 例:X=10101110,用X^0=10101110 使用 ^ 运算符交换两个数: // 临时变量 int t = a; a = b; b = t; // 使用 ^ 运算

77910

按十进制运算

前提: 游戏的ID规则如下: 长度:8十进制数,如12345678 前2表示ID类型,比如10表示关卡ID,11表示装备ID,12表示物品ID; 其中对于一个装备ID:11234567 2表示品质;...让游戏策划把所有5级装备都配置在表格里,他们的解锁关卡都是10234567; 缺点:仅这一条限制,策划最多需要填写999999条记录,这样对于程序来说查找性能,内存占用都是一个问题; 方法2:按十进制模式匹配...:规则无关的填成0,相关的,填成相应的值 策划只需要填写一条记录:ID=11000005,关卡ID=10234567 对于不懂程序的从业人员来说,按十进制填写模式匹配模版是一个很容易理解的方法。...查找排序的比较函数代码如下: //递归调用,先高位,后低位 //按十进制比较,若为0,则忽略当前, static inline int DecimalBitCompare(uint32_t

55900

(&)、或(|)、异或(^) – 运算详解

运算,在平时的使用频率不是很高,大部分人都很少用到,以至于对位运算的理解也是比较模糊。 下面就来详细说说,这些平时不常用的运算符究竟应该怎么用,以及有什么需要注意的事项。...使用运算来判断,在某种程度上也可以减轻数据库存储数据的压力(嗯,这个作用目前还感觉不明显),废话不多说,客观继续往下看(老鸟请留情,谢谢) 运算符 描述信息我已经尽量用比较好理解的方式修改,官方的实在是有点儿绕...,寄希望下次看到的时候能立马想起来而不是再去理解一次 运算符 含义 描述(运算,基于二进制表示) 示例 & 按 只有参与运算的两均为1时,结果才为1,否则为0 ab:$a & $b | 按或...只有参与运算的两均为0时,结果才为0,否则为1 a或b:$a | $b ^ 按异或 只有参与运算的两不同时,结果才为1,否则为0 a异或b:$a ^ $b ~ 按非(取反) 将用二进制表示的操作数中为...,左侧移空的用0补齐 a右移4:$a>>4 图示说明: 定义: A=81(d)=01010001(b) B=9(d)=00001001(b) 按(&) 规则:0&0=0,0&1=0,1&0=0

1.3K20
领券