私は今日、私の学部 (セルビアのベオグラードの数学学部) で次のような課題を受け取りました。
1) 与えられた 2 つの整数 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 が得られます。これは正しいです。また、ビットプリントが一致します。これを行うためのより良い方法があるかどうかを知りたいです。
ありがとう。