0

! & ^ ~ やシフトなどのビット単位の演算子のみを使用して、数値 (a/(2**b) を計算する必要があります。次のヒントが与えられましたが、C は初めてで、コードの意味がわかりません。

int bias = x>0 ? 0 : ((1<<n)-1);

誰かが私にそれを説明できますか?

a>>b は機能すると思いましたが、負の数では機能しないと思います。

4

3 に答える 3

3

xが正の場合、その特定のコードビットは0のバイアスを与えます。それ以外の場合は、下位 n ビットのマスクを生成します。このx = a ? b : c;パターンは、C では三項演算子(技術的には「条件演算子」のようです)と呼ばれます。

n      (1<<n)    (1<<n)-1     binary
0        0x01       0x00     00000000
1        0x02       0x01     00000001
2        0x04       0x03     00000011
3        0x08       0x07     00000111
4        0x10       0x0F     00001111
5        0x20       0x1F     00011111
6        0x40       0x3F     00111111
7        0x80       0x7F     01111111
           ...
于 2010-09-25T00:34:01.583 に答える
0

まあ、x<<n正の数に対して正しく機能します。それでは、次のようなものを使用しないでください result=if sign=1 then (x<<n) else(-x<<n) (iftehenelseを符号ビットでマスキングして置き換えます)

于 2010-10-05T17:22:27.373 に答える
-1

はぁ…これは宿題の質問です。学生は、プログラマーの視点の教科書であるコンピューター システムの課題について助けを求めています。

今後の参考として、誰かが「何かをするために XYZ 演算子のみを使用することを許可されている」と言うときはいつでも、それはおそらく宿題の質問です。

宿題の質問で助けを求める人々から評判を奪う方法はないと思いますよね?

于 2014-01-23T02:20:43.660 に答える