ビット演算でこんなことができるなんて
やあ (´・ω・`)
ようこそ、ビットハウスへ。
この右シフトはサービスだから、まず演算して落ち着いて欲しい。うん、「また」なんだ。済まない。
仏の顔もって言うしね、謝って許してもらおうとも思っていない。でも、このタイトルを見たとき、君は、きっと言葉では言い表せない
「ときめき」みたいなものを感じてくれたと思う。
殺伐とした世の中で、そういう気持ちを忘れないで欲しい
そう思って、この記事を書いたんだ。
今回はJavaScriptのビット演算で、床関数の実装と整数位未満の四捨五入ができるというお話です。今のところこれができる言語はPHPの他には見つけられなかったので実用性はいまいちですが。
床関数というのは、与えられた実数の整数部を返す関数のことです。要はMath.floorと同じことをするわけですね。これを実現するビット演算はこちら。
num = Math.PI num | 0 //0との論理和を取る num & -1 //-1との論理積を取る num << 0 //0ビットシフトする(シフト方向は左右どちらでも可)
いずれも3を返します。最初の0との論理和を取るものがいちばん短いので、ショートコーディングをするならこれを使うことをおすすめします。
このように床関数が実現できるので、これを使うと整数位未満四捨五入が、Math.roundを使わなくても実現することができます。話は簡単で、四捨五入したい数値に0.5足せばいいだけです。
num = 2.75 (0.5+num)|0 //こうする .5+num|0 //さらに短く Math.round(num)
ビット演算は四則演算よりも優先度が低いので、視認性を挙げる目的でもない限り基本的にかっこは不要です。このように最大7文字節約できます。