我试图将一个 int 变量拆分为任意长度的两部分(即:将 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
任何人都可以提出解决此问题的方法吗?