char类型数据位操作处理,清零、设值、取值
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(逻辑右移) };