タグ付けされた質問 「multiplication」


5
単一の乗算でビットを抽出する
別の質問への回答で使用されている興味深いテクニックを見て、少しよく理解したいと思います。 符号なし64ビット整数が与えられ、次のビットに関心があります。 1.......2.......3.......4.......5.......6.......7.......8....... 具体的には、次のように上位8つの位置に移動します。 12345678........................................................ で示されるビットの値は.関係ありません。それらを保持する必要はありません。 溶液は、不要なビットをマスクし、によって結果を乗算することでした0x2040810204081。結局のところ、これでうまくいきます。 この方法は一般的ですか?この手法を使用してビットのサブセットを抽出できますか?そうでない場合、方法が特定のビットのセットに対して機能するかどうかをどのようにして理解しますか? 最後に、与えられたビットを抽出するために(a?)正しい乗数をどのように見つけますか?

19
Cのシフト演算子を使用した乗算と除算は実際には高速ですか?
乗算と除算は、ビット演算子を使用して実現できます。 i*2 = i<<1 i*3 = (i<<1) + i; i*10 = (i<<3) + (i<<1) 等々。 直接(i<<3)+(i<<1)使用i*10するよりも、sayを使用して10を乗算する方が実際に高速ですか?この方法で乗算または除算できない入力の種類はありますか?


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.