int 変数を任意の長さの 2 つの部分に分割しようとしています (つまり、32 ビットを 31 と 1 ビット、30 と 2 ビット、16 と 16 ビット、1 と 31 ビットなどに分割します)。
ビットごとのシフト演算子を使用して実装しようとしましたが、正しく機能しないようです。
int botLength = 4;
int start = ~0;
int top = start << botLength;
int bottom = start - top;
std::cout << "Top: " << std::bitset<32>(top) << std::endl;
std::cout << "Bottom: " << std::bitset<32>(bottom) << std::endl;
これは出力します
Top: 11111111111111111111111111110000
Bottom: 00000000000000000000000000001111
私が望むところ:
Top: 00001111111111111111111111111111
Bottom: 00000000000000000000000000001111
コードを次のように変更することでこれを修正できると思いました。
int botLength = 4;
int start = ~0;
int top = start << botLength;
int bottom = start - top;
top = top >> botLength; //added this
std::cout << "Top: " << std::bitset<32>(top) << std::endl;
std::cout << "Bottom: " << std::bitset<32>(bottom) << std::endl;
ただし、これを出力すると、パディングとして 1 が追加されるようです。
Top: 11111111111111111111111111111111
Bottom: 00000000000000000000000000001111
誰でもこれを修正する方法を提案できますか?