非数字的按位运算
Posted
技术标签:
【中文标题】非数字的按位运算【英文标题】:Bitwise operations on non numbers 【发布时间】:2012-06-17 18:20:44 【问题描述】:不知何故,javascript 可以理解 bitwise operationsNaN ^ 1
、Infinity ^ 1
甚至 'a' ^ 1
(全部计算为 1
)。
管理非数字的位运算符的规则是什么?为什么上面所有的例子都评估为1
?
【问题讨论】:
【参考方案1】:根据ES5 spec,在做bitwise operations时,所有操作数都转换为ToInt32
(先调用ToNumber
,如果值为NaN
或Infinity
,则转换为0
)。
因此:NaN ^ 1
=> 0 XOR 1
=> 1
【讨论】:
那些规格..... +1 我还以为是function bitwise(obj) if (typeof o !== "Number") return 1;
@gdoron:一定会喜欢这个规范:-P
如果他们给我你的代表,我会的。 :)
值得一提的是,结果取决于第二个操作数。示例:"A" ^ 2 === 2 // true
为了完整起见,任何非数字文字字符串都是NaN
然后"a" ^ 1 = 1
@亚历山大。几乎,任何非数字(所有其他类型,如对象和数组)都评估为 NaN。 /fndsjkn/ ^ 1 == 1
【参考方案2】:
ECMA-262 在 11.10 中定义二进制位运算符的参数使用 ToInt32 进行转换。解释 ToInt32 的 9.5 在其前两点中说:
令 number 为对输入参数调用 ToNumber 的结果。 如果数字是 NaN、+0、-0、+Inf 或 -Inf,则返回 +0。
【讨论】:
以上是关于非数字的按位运算的主要内容,如果未能解决你的问题,请参考以下文章
Leetcode练习(Python):位运算类:第201题:数字范围按位与:给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按