有人能解释我为什么下面的代码:与右位移位奇怪的行为
#include <iostream>
#include <bitset>
int main()
{
unsigned char i = 2;
std::cout<<std::bitset<8>((~static_cast<unsigned char>(0)) << i)<<std::endl;
std::cout<<std::bitset<8>((~static_cast<unsigned char>(0)) >> i)<<std::endl;
return 0;
}
产地:
11111100
11111111
,而不是:
11111100
00111111
不要使用按位补码来设置所有位,而是使用'static_cast( - 1)',而且会得到预期的结果 –
Praetorian