独自の C フロア関数を作成しようとしています。私はこのコードの詳細にこだわっています。unsigned int の下位 n ビットをゼロにする方法を知りたいです。
たとえば、51.5 を 51.0 に丸めるには、下位 18 ビットをゼロにし、上位 14 ビットを保持する必要があります。フロート表現。そのような個々のケースのマスクを作成する方法は知っていますが、すべてのケースで機能するようにコーディングする方法はわかりません. 助けてください。
独自の C フロア関数を作成しようとしています。私はこのコードの詳細にこだわっています。unsigned int の下位 n ビットをゼロにする方法を知りたいです。
たとえば、51.5 を 51.0 に丸めるには、下位 18 ビットをゼロにし、上位 14 ビットを保持する必要があります。フロート表現。そのような個々のケースのマスクを作成する方法は知っていますが、すべてのケースで機能するようにコーディングする方法はわかりません. 助けてください。
はるかに簡単な方法は、これを行うだけです:
value = (value >> bits) << bits
左にシフトすると、そこにあったものではなく、ゼロで埋められるためです。
数値を N ビット左にシフトします。1 を引きます。ビットを反転します。そして、マスクする必要がある番号を使用します。
1 << 14 = 00000000000000000010000000000000
-1 = 00000000000000000001111111111111
~ = 11111111111111111110000000000000
これをand
使用すると、マスクの 1 は入力を保持し、マスクの 0 は結果を 0 に設定します。