具体而言,我试图通过删除任何操作符来简化此特定代码行,但限制是我只允许使用! ~ & ^ | + << >>
:
int combine = ((sign << n) + ~sign + 1);
答案 0 :(得分:4)
如果你运行这个程序几次,使用不同的n
值,会有一个可怕的模式:
#include <stdio.h>
int main(void) {
int n = 4;
for(int sign=1; sign<15; ++sign)
{
int combine = ((sign << n) + ~sign + 1);
printf("%d => %d\n", sign, combine);
}
return 0;
}
在每种情况下,时间:
n == 1, then combine == sign.
n == 2, then combine == 3*sign.
n == 3, then combine == 7*sign.
一般来说,对于任何N,combine == ((2
n
)-1) * sign
现在,你能找到一种表达这种关系的快捷方式吗?
您还没有告诉我们关于n
和sign
的值的限制吗?
或者是否需要针对n
和sign
的 所有 值进行解决?