我今天在我的学院(塞尔维亚贝尔格莱德数学学院)接到了一个作业,上面写着:
1) 编写一个程序,对于两个给定的整数 x 和 y,将与 y 中的相应位匹配的位反转为整数 x,而其余位保持不变。
例如:
x = 1001110110101
y = 1100010100011
x' = 0011101011100
我设法编写了一个程序来做到这一点,但我对我的解决方案的质量有点不安全。请,如果您有时间,请查看代码并告诉我如何改进它。
int x, y, bitnum;
int z = 0;
unsigned int mask;
bitnum = sizeof(int) * 8;
mask = 1 << bitnum - 1;
printf("Unesi x i y: ");
scanf("%d%d", &x, &y);
while (mask > 1) {
if ( (((x & mask) == 0) && ((y & mask) == 0)) ||
((x & mask) && ((y & mask) == 0)) )
z += 1;
z <<= 1;
mask >>= 1;
} /* <-- THAT'S HOW STUPID PEOPLE SOLVE PROBLEMS... WITH HAMMER! */
z = y~; /* <-- THAT'S HOW SMART PEOPLE SOLVE PROBLEMS... WITH ONE LINE */
一切正常,例如 x = 423 和 y = 324,我得到 z = -344,这是正确的。此外,位打印匹配我只是想知道是否有更好的方法来做到这一点。
谢谢。