我需要计算一个数字(a /(2 ** b)只使用按位运算符,例如!& ^〜和shift。我得到了以下提示,但我是C的新手,我不知道是什么代码意味着:
int bias = x>0 ? 0 : ((1<<n)-1);
任何人都可以向我解释一下吗?
我认为&gt;&gt; b会起作用,但我认为它不适用于负数。
答案 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操作员做某事”,这可能是一个功课问题。
我认为没有办法从那些在家庭作业问题上寻求帮助的人那里获得声誉,是吗?