変数の持っている値を、指定ビット以降を開始ビットとして上書きし、データ型上の残ったビットはもう一つ変数を用意して、先頭ビットから上書きする、といった動作を行おうとしています。
ひとまず組んでみて、結果は想定通りになるのですが、ビット演算の使い方が、こういうものでよいのか、と悩んでしまっております。
以下のように作ってみたのですが、「DWORD d2」で使っているシフト演算は、行ったり来たりになっており、なんとも言えないところです。
もっとスマートな方法があれば、ご教授願いたく思います。
C++
1int _tmain(int argc, _TCHAR* argv[]) 2{ 3 DWORD d = 4294967295; 4 DWORD bitSize = 32; 5 WORD target = 0; 6 cin >> target; 7 WORD blockCount = 1; 8 if (target > 0) 9 blockCount++; 10 std::vector<DWORD> list; 11 for (int i = 0; i < blockCount; i++) 12 { 13 DWORD d2 = (d >> target) << target; 14 list.push_back(d2); 15 16 d = d >> (bitSize - target); 17 target = 0; 18 } 19 return 0; 20}
入力値:0の目標結果。
<入力>
d = 11111111111111111111111111111111(4294967295)
<結果>
list[0] = 11111111111111111111111111111111(4294967295)
入力値:1の目標結果。
<入力>
d = 11111111111111111111111111111111(4294967295)
<結果>
list[0] = 11111111111111111111111111111110(4294967294)
list[1] = 00000000000000000000000000000001(1)
入力値:15の目標結果。
<入力>
d = 11111111111111111111111111111110(4294967294)
<結果>
list[0] = 11111111111111111000000000000000(4294934528)
list[1] = 00000000000000000111111111111111(32767)
回答3件
あなたの回答
tips
プレビュー