JavaScript |运算符

JavaScript |运算符,javascript,bitwise-operators,Javascript,Bitwise Operators,有人能解释“|”和后面的值是什么吗?我知道0的输出创建了一组13,数字,3,2,1,0。但是1或2呢 var i = 52; while(i--) { alert(i/13 | 0); } 它是按位OR运算符。这里有一个解释和一个例子。由于在一个操作数为0的情况下执行按位或运算会生成另一个操作数的值,因此在这种情况下,它不会将除法结果向下舍入 如果它被写入|1它将始终打印奇数(因为它会将1位设置为on);具体来说,它将导致偶数增加1,而奇数保持不变 更新:正如注释者正确指出的那样,按位

有人能解释“|”和后面的值是什么吗?我知道0的输出创建了一组13,数字,3,2,1,0。但是1或2呢

var i = 52;
while(i--) {
    alert(i/13 | 0);
}
它是按位OR运算符。这里有一个解释和一个例子。由于在一个操作数为0的情况下执行按位或运算会生成另一个操作数的值,因此在这种情况下,它不会将除法结果向下舍入

如果它被写入
|1
它将始终打印奇数(因为它会将1位设置为on);具体来说,它将导致偶数增加1,而奇数保持不变


更新:正如注释者正确指出的那样,按位运算符使两个操作数都被视为整数,因此删除除法结果的任何部分。我被纠正了。

这是按位OR。在计算表达式时,LHS被截断为整数并返回,因此|与Math.floor()有效相同。

这是实现与以下相同效果的巧妙方法:

Math.floor(i/13);
JavaScript开发人员似乎擅长这类事情:)

在JavaScript中,所有数字都是浮点。没有整数类型。因此,即使你这样做:

 var i = 1;
i实际上是浮点数
1.0
。因此,如果你只是做了
i/13
,你会得到它的一小部分,例如,输出将是
3.846…


在JavaScript中使用按位or运算符时,运行时必须先将操作数转换为32位整数,然后才能继续。这样做会去掉小数部分,只剩下一个整数。按位或为零是一个不可操作的运算符(在有真正整数的语言中是不可操作的),但在JavaScript中有一个副作用。

它是一个按位运算符。特别是

它的基本功能是将var用作一个位数组,每个对应的位相互关联。如果其中任何一个为1,则结果为1。如果两者都是0,则为0

例如:

24=11000

10=1010

这两个长度不相等,所以我们用0填充

24=11000

10=01010


26=11010

24 | 10=26


学习这一点的最好方法是。

@Jon它将i/13的结果四舍五入,这不是很重要吗?@bcm这是因为按位数学只能在整数上进行。按位OR不负责向下舍入-正如Jon所说,这实际上是一个no操作。按位运算符负责截断-它强制将LHS减少为整数,然后与RHS(在本例中必须为零)进行比较,然后返回。相互测试技巧。。。使用副作用隐藏了代码的用途,因此使用
Math.floor
更适合于使代码更易于维护。@Guffa我想如果我经常使用它,第一眼就能理解,然后就可以维护:)谢谢,你的回答也很有帮助。请注意,你可以用一个双非门来实现同样的效果:
~
@Box9不是两个的补码吗?(整数为1-x)~不用担心2的恭维之类的,它只是翻转所有的位<代码>~~(i/13)确实有效(只是快速试用)