class GetBit
{
public:
GetBit() {}
GetBit(const unsigned char c) { byt = c; }
~GetBit() {}
// 将某位清0
//
void clearBit(int i)
{
if (i == 0)
byt = byt ^ (byt & 0x01);
else if (i == 1)
byt = byt ^ (byt & 0x02);
else if (i == 2)
byt = byt ^ (byt & 0x04);
else if (i == 3)
byt = byt ^ (byt & 0x08);
else if (i == 4)
byt = byt ^ (byt & 0x10);
else if (i == 5)
byt = byt ^ (byt & 0x20);
else if (i == 6)
byt = byt ^ (byt & 0x40);
else if (i == 7)
byt = byt ^ (byt & 0x80);
}
// 将某位设1
//
void setBit(int i)
{
if (i == 0)
byt = byt | 0x01;
else if (i == 1)
byt = byt | 0x02;
else if (i == 2)
byt = byt | 0x04;
else if (i == 3)
byt = byt | 0x08;
else if (i == 4)
byt = byt | 0x10;
else if (i == 5)
byt = byt | 0x20;
else if (i == 6)
byt = byt | 0x40;
else if (i == 7)
byt = byt | 0x80;
}
// 取出某位
//
int getBit(int i)
{
if (i == 0)
return int(byt & 0x01);
else if (i == 1)
return int(byt & 0x02);
else if (i == 2)
return int(byt & 0x04);
else if (i == 3)
return int(byt & 0x08);
else if (i == 4)
return int(byt & 0x10);
else if (i == 5)
return int(byt & 0x20);
else if (i == 6)
return int(byt & 0x40);
else if (i == 7)
return int(byt & 0x80);
return 0;
}
private:
unsigned char byt;
// & 与 两个位都为1时,结果才为1
// | 或 两个位都为0时,结果才为0
// ^ 异或 两个位相同为0,相异为1
// ~ 取反 0变1,1变0
// << 左移 各二进位全部左移若干位,高位丢弃,低位补0
// >> 右移 各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移)
};