Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.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
Javascript 如何使用位运算符删除小数部分?_Javascript_Floating Point_Bit Manipulation - Fatal编程技术网

Javascript 如何使用位运算符删除小数部分?

Javascript 如何使用位运算符删除小数部分?,javascript,floating-point,bit-manipulation,Javascript,Floating Point,Bit Manipulation,我见过许多人使用位运算符删除小数部分,或使用位运算符对数字进行四舍五入。 但是,我想知道这到底是怎么回事? let a = 13.6 | 0; //a == 13 let b = ~~13.6; // b == 13 我也找过。我能找到的最好的是。 那里的人们在谈论效率、优点和缺点。我对它的实际工作原理很感兴趣 除无符号右移>>>之外的所有按位操作都处理有符号32位整数。因此,使用位操作将浮点转换为整数 因此,使用位操作将浮点转换为整数。但是如何呢?对于|,它的两个运算符通过操作转换为整数,这

我见过许多人使用位运算符删除小数部分,或使用位运算符对数字进行四舍五入。

但是,我想知道这到底是怎么回事?

let a = 13.6 | 0; //a == 13
let b = ~~13.6; // b == 13
我也找过。我能找到的最好的是。
那里的人们在谈论效率、优点和缺点。我对它的实际工作原理很感兴趣

除无符号右移>>>之外的所有按位操作都处理有符号32位整数。因此,使用位操作将浮点转换为整数


因此,使用位操作将浮点转换为整数。但是如何呢?

对于
|
,它的两个运算符通过操作转换为整数,这两个运算符上的
都调用了
ToInt32
,其过程是:

对Int32的抽象操作采用参数。它将参数转换为-231到231-1(包括-231-1)范围内的232个整数值之一。调用时,它将执行以下步骤:

  • 让数字成为现实吧?ToNumber(参数)
  • 如果数字为NaN,+0,-0+∞, 或-∞, 返回+0
  • 设int为与Number符号相同的数值,其大小为floor(abs(Number))。
  • 设INT32位为int模2**32
  • 如果INT32位≥ 2**31,返回INT32位-2**32;否则返回int32位
  • ~
    ,或通过在其运算符上调用
    ToInt32

    使用
    x | 0
    将删除
    x
    (通过
    ToInt32
    )的小数部分,并且不翻转任何位,因此就好像只删除了小数部分一样


    使用
    ~x
    将删除
    x
    的小数部分并翻转其所有位。使用
    ~~x
    也可以做到这一点,但将位翻转两次,因此结果就像对原始表达式所做的一切都是删除小数部分一样。

    您对整数值和浮点值的理解是什么?你到底想知道什么-你对算法和它如何处理边缘情况感兴趣吗?你在寻找引擎实现吗?你想知道RAM中的各个位发生了什么吗?你想知道RAM中的各个位发生了什么吗?这就是我要找的?使用小数的
    如何修剪其小数部分?好的。嗯,它不处理单个比特。它将64位视为双浮点表示,并对它们进行数学运算以得出一个整数。我需要在JS中学习很多关于数字的知识,实际上我学习了很多次,但从未完全理解:(.这是为我解压答案的唯一关键。:)