x | 0在JavaScript中如何表示数字?
在我先前问题的公认答案中 (),我想知道一个数字是如何通过符号x | 0在JavaScript中如何表示数字?,javascript,numbers,integer,floor,Javascript,Numbers,Integer,Floor,在我先前问题的公认答案中 (),我想知道一个数字是如何通过符号| 例如: var x = 5.12042; x = x|0; 那层楼的电话号码是多少 还有一些例子: console.log( 104.249834 | 0 ); //104 console.log( 9.999999 | 0 ); // 9 按位运算符将其参数转换为整数(请参阅)。 我知道的大多数语言不支持这种类型的转换: $ python -c "1.0|0" Traceback (most recent ca
|
例如:
var x = 5.12042;
x = x|0;
那层楼的电话号码是多少
还有一些例子:
console.log( 104.249834 | 0 ); //104
console.log( 9.999999 | 0 ); // 9
按位运算符将其参数转换为整数(请参阅)。 我知道的大多数语言不支持这种类型的转换: $ python -c "1.0|0" Traceback (most recent call last): File "", line 1, in TypeError: unsupported operand type(s) for |: 'float' and 'int' $ ruby -e '1.0|0' -e:1:in `': undefined method `|' for 1.0:Float (NoMethodError) $ echo "int main(){1.0|0;}" | gcc -xc - : In function ‘main’: :1: error: invalid operands to binary | (have ‘double’ and ‘int’) $python-c“1.0 | 0” 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 TypeError:|“float”和“int”的操作数类型不受支持 $ruby-e'1.0 | 0' -e:1:in`':1.0的未定义方法`|:Float(NoMethodError) $echo“int main(){1.0 | 0;}”| gcc-xc- :在函数“main”中: :1:错误:二进制|的操作数无效(具有'double'和'int')
因为,根据ECMAScript规范,按位运算符对每个要求值的表达式调用
ToInt32
见:
产生式A:A@B
,其中@
是
上述产品的评估如下:
A
GetValue(结果(1))
B
GetValue(结果(3))
到Int32(结果(2))。
ToInt32(结果(4))。
@
应用于结果(5)
和结果(6)
。结果是一个有符号的32位整数结果(7)
执行
floor
时,虽然可以将参数转换为整数,但大多数语言都不会这样做,因为原始类型是浮点数
在保留数据类型的同时执行此操作的更好方法是将指数
数字放入尾数
并将剩余位置零
如果您感兴趣,可以查看浮点数的表达式。您应该知道,使用位运算符将限制为32位有符号整数<代码>((数学pow(2,32)/2)-1)0;//2147483647删除
-1
,将无法获得所需的结果<代码>((Math.pow(2,32)/2))|0;//-2147483648有趣。这可能是该函数比Math.floor(x)
函数稍快的原因。它实际上不是“地板”,请尝试使用-1.23
,以查看发生了什么s/Most(.*)不/强类型\1通常不/
(但是,这非常依赖于语言。)