以2的幂除以圆为零

时间:2010-09-25 00:28:36

标签: c division

我需要计算一个数字(a /(2 ** b)只使用按位运算符,例如!& ^〜和shift。我得到了以下提示,但我是C的新手,我不知道是什么代码意味着:

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

任何人都可以向我解释一下吗?

我认为&gt;&gt; b会起作用,但我认为它不适用于负数。

3 个答案:

答案 0 :(得分:3)

如果x为正,那么特定的代码位会给出0的偏差。否则它产生低n位的掩码。 x = a ? b : c;模式在C中称为ternary operator(技术上是“条件运算符”)。

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
           ...

答案 1 :(得分:0)

好吧,x<<n对正数有效。那你为什么不用这样的东西呢?     result=if sign=1 then (x<<n) else(-x<<n) (用符号位屏蔽替换iftehenelse)

答案 2 :(得分:-1)

叹息......这是一个家庭作业问题。该学生正在寻求计算机系统任务的帮助,这是一本程序员观点教科书。

为了将来参考,任何时候有人说“我只允许使用XYZ操作员做某事”,这可能是一个功课问题。

我认为没有办法从那些在家庭作业问题上寻求帮助的人那里获得声誉,是吗?