1

独自の C フロア関数を作成しようとしています。私はこのコードの詳細にこだわっています。unsigned int の下位 n ビットをゼロにする方法を知りたいです。

たとえば、51.5 を 51.0 に丸めるには、下位 18 ビットをゼロにし、上位 14 ビットを保持する必要があります。フロート表現。そのような個々のケースのマスクを作成する方法は知っていますが、すべてのケースで機能するようにコーディングする方法はわかりません. 助けてください。

4

2 に答える 2

9

はるかに簡単な方法は、これを行うだけです:

value = (value >> bits) << bits

左にシフトすると、そこにあったものではなく、ゼロで埋められるためです。

于 2013-02-10T07:01:41.947 に答える
3

数値を N ビット左にシフトします。1 を引きます。ビットを反転します。そして、マスクする必要がある番号を使用します。

1 << 14 = 00000000000000000010000000000000
     -1 = 00000000000000000001111111111111
     ~  = 11111111111111111110000000000000

これをand使用すると、マスクの 1 は入力を保持し、マスクの 0 は結果を 0 に設定します。

于 2013-02-10T06:58:37.420 に答える