という問題があり、ビットを回転する処理の仕方が分からなかったので解答(以下)
#include <iostream>
using namespace std;
int rotate(int i);
long rotate(long i);
int main()
{
int a;
long b;
a = 0x8000;
b = 8;
cout << rotate(a);
cout << "\n";
cout << rotate(b);
return 0;
}
int rotate(int i)
{
int x;
if (i & 0x80000000) x = 1;
else x = 0;
i = i << 1;
i += x;
return i;
}
long rotate(long i)
{
int x;
if (i & 0x80000000) x = 1;
else x = 0;
i = i << 1;
i += x;
return i;
}
65536
16
という結果が得られました。
int aの例では値 16進数 0x8000 は、2進数では 0000 0000 0000 0000 1000 0000 0000 0000 なので、
1が左へ1ビット移動し、32ビット目の? 0が一番右に入れられた結果、
0000 0000 0000 0001 0000 0000 0000 0000 になり、10進数表記で65536 と出力された。…ということのようです。(sizeof演算子で調べたらint型もlong型もともに4バイトでした。)
rotate()関数の宣言内 が、具体的にはどういう処理なのかが掴めないで困っております。
どの部分はどういう意味という風に教えていただけないでしょうか。
特にifの行がよく分かりません。