Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
x | 0在JavaScript中如何表示数字?_Javascript_Numbers_Integer_Floor - Fatal编程技术网

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通常不/
    (但是,这非常依赖于语言。)