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 回答