1. ホーム
  2. ジャバスクリプト

[解決済み】ビット単位のOR 0で数値を階数化する方法

2022-04-08 07:51:46

質問

私の同僚が、ビット単位の論理和を使用して浮動小数点数を階数化する方法を偶然見つけました。

var a = 13.6 | 0; //a == 13

そんな話をしていて、少し疑問に思ったことがありました。

  • どのように機能するのですか?私たちの理論では、このような演算子を使用すると、数値が整数にキャストされるため、端数部分が削除されます。
  • と比べて何か利点があるのでしょうか? Math.floor ? ちょっとだけ速いかも?(ダジャレではありません)
  • デメリットはありますか?うまくいかない場合もあるのでは?わかりやすさは、考えないといけないので、まあ、この質問を書いているわけですから、当然といえば当然です。

ありがとうございます。

どのように解決するのですか?

<ブロッククオート

どのように機能するのか?私たちの理論では、このような演算子を使うことで を整数に変換することで、分数部分を取り除くことができます。

符号なし右シフトを除くすべてのビット演算。 >>> は符号付き32ビット整数を対象とします。したがって、ビット演算を使用すると、float が整数に変換されます。

Math.floorと比較して何か利点があるのでしょうか?もしかしたら、少し より速く?(ダジャレではありません)

http://jsperf.com/or-vs-floor/2 若干速いような気がする

何かデメリットがあるのでしょうか?うまくいかないケースもあるのでは? わかりやすさは、考えなければならないことなので、まあ、当然といえば当然です。 この質問を書いているのは私です。

  • jsLintを通過しません。
  • 32ビット符号付き整数のみ
  • 比較の動作がおかしい Math.floor(NaN) === NaN を、一方 (NaN | 0) === 0