【发布时间】:2014-01-21 22:53:11
【问题描述】:
谁能解释一下为什么下面的代码:
#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<unsigned char>(-1),您会得到预期的结果
标签: c++ bit-manipulation bit-shift