【发布时间】:2011-07-28 20:24:42
【问题描述】:
谁能解释一下“|”之后的价值呢?我知道 0 的输出会创建 13 个集合,即数字 3、2、1、0。但是 | 1,或 | 2.
var i = 52;
while(i--) {
alert(i/13 | 0);
}
【问题讨论】:
标签: javascript bitwise-operators
谁能解释一下“|”之后的价值呢?我知道 0 的输出会创建 13 个集合,即数字 3、2、1、0。但是 | 1,或 | 2.
var i = 52;
while(i--) {
alert(i/13 | 0);
}
【问题讨论】:
标签: javascript bitwise-operators
它是位或运算符。既有解释又有例子over at MDC。由于对一个操作数为 0 进行按位或运算会产生另一个操作数的值,在这种情况下,它什么都不做向下舍入除法的结果。
如果写成| 1,它会做的总是打印奇数(因为它会将 1 位设置为打开);具体来说,它会导致偶数加 1,而奇数保持不变。
更新:正如评论者正确指出的那样,按位运算符会导致两个操作数都被视为整数,因此会删除除法结果的任何部分。我的立场是正确的。
【讨论】:
Math.floor 来使代码更易于维护。
这是实现相同效果的巧妙方法:
Math.floor(i/13);
JavaScript 开发人员似乎很擅长这些事情 :)
在 JavaScript 中,所有数字都是浮点数。没有整数类型。所以即使你这样做:
var i = 1;
i 实际上是浮点数1.0。所以如果你只是做了i/13,你最终会得到它的一小部分,例如输出将是3.846...。
在 JavaScript 中使用按位或运算符时,运行时必须将操作数转换为 32 位整数才能继续。这样做会去掉小数部分,只剩下一个整数。按位或为零是无操作(嗯,在具有真正整数的语言中是无操作),但在 JavaScript 中具有地板的副作用。
【讨论】:
~~。
~~(i/13) 确实有效(只是快速尝试)
这是一个位运算符。特别是OR Bitwise Operator。
它的基本作用是将你的 var 用作一个位数组,并且每个对应的位都相互关联。如果其中任何一个为 1,则结果为 1。如果两者均为 0,则结果为 0。
例子:
24 = 11000
10 = 1010
两者的长度不相等,所以我们用 0 填充
24 = 11000
10 = 01010
26 = 11010
24 | 10 = 26
最好的学习方法是readup on it。
【讨论】:
这是按位或。在计算表达式时,LHS 被截断为整数并返回,所以 |实际上与 Math.floor() 相同。
【讨论】: