お世話になっております。
現在「独習C++」という本を読んでいるのですが、サンプルプログラムで知りたい点が
あったので質問することにしました。
↓サンプルプログラム
c++
1#include <iostream> 2using namespace std; 3 4int rotate(int i); 5long rotate(long i); 6 7int main() 8{ 9 int a; 10 long b; 11 12 a = 0x8000; 13 b = 8; 14 cout << rotate(a); 15 cout << "\n"; 16 cout << rotate(b); 17 18 return 0; 19} 20 21int rotate(int i) 22{ 23 int x; 24 25 if(i & 0x8000) x = 1; 26 else x = 0; 27 28 i = i << 1; 29 i += x; 30 31 return i; 32} 33 34long rotate(long i) 35{ 36 int x; 37 38 if(i & 0x80000000) x = 1; 39 else x = 0; 40 41 i = i << 1; 42 i += x; 43 44 return i; 45}
if(i & 0x8000) x = 1; の部分ですが、変数i と16進数8000をAND演算子?の&で
比較していますが、これは内部の処理は
i 1000 0000 0000 0000
16進数の数 1000 0000 0000 0000
ANDの結果 1000 0000 0000 0000
になってるという理解で正しいのでしょうか?
またif(i & 0x80000000) x = 1;の部分は
i 0000 0000 0000 0000 0000 0000 0000 1000
16進数の数 1000 0000 0000 0000 0000 0000 0000 0000
ANDの結果 0000 0000 0000 0000 0000 0000 0000 0000
になってるという理解で正しいのでしょうか?
なんだか頭がこんがらがってすっきりさせたいです。
お手数をおかけしますがよろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/04/17 11:43