在Two补丁程序中简化操作使用

时间:2017-01-25 22:56:50

标签: c

具体而言,我试图通过删除任何操作符来简化此特定代码行,但限制是我只允许使用! ~ & ^ | + << >>

int combine = ((sign << n) + ~sign + 1);

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

现在,你能找到一种表达这种关系的快捷方式吗?

您还没有告诉我们关于nsign的值的限制吗?
 或者是否需要针对nsign 所有 值进行解决?