有人能解釋我爲什麼下面的代碼:與右位移位奇怪的行爲
#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