非数字的按位运算

Posted

技术标签:

【中文标题】非数字的按位运算【英文标题】:Bitwise operations on non numbers 【发布时间】:2012-06-17 18:20:44 【问题描述】:

不知何故,javascript 可以理解 bitwise operationsNaN ^ 1Infinity ^ 1 甚至 'a' ^ 1(全部计算为 1)。

管理非数字的位运算符的规则是什么?为什么上面所有的例子都评估为1

【问题讨论】:

【参考方案1】:

根据ES5 spec,在做bitwise operations时,所有操作数都转换为ToInt32(先调用ToNumber,如果值为NaNInfinity,则转换为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。

【讨论】:

以上是关于非数字的按位运算的主要内容,如果未能解决你的问题,请参考以下文章

128 位整数之间的按位运算

python-opencv-图像的按位运算

c语言的按位运算符怎么操作!?

Leetcode练习(Python):位运算类:第201题:数字范围按位与:给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按

Apache Pig 中的按位运算?

Masm 常量的按位运算