我需要计算一个数字 (a/(2**b) 仅使用按位运算符,例如 ! & ^ ~ 和移位。我得到了以下提示,但我是 C 新手,我不知道代码的含义:
int bias = x>0 ? 0 : ((1<<n)-1);
谁能给我解释一下?
我认为 a>>b 会起作用,但我认为它不适用于负数。
如果 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
...
好吧,x<<n
适用于正数。那么你为什么不使用类似的东西
result=if sign=1 then (x<<n) else(-x<<n)
(用符号位替换 iftehenelse)
唉......这是一个家庭作业问题。学生正在向程序员的视角教科书“计算机系统”的作业寻求帮助。
为了将来参考,任何时候有人说“我只能使用 XYZ 运算符做某事”,这可能是一个家庭作业问题。
我不认为有办法从寻求家庭作业问题帮助的人那里夺走声誉,是吗?