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(逻辑右移)
};

  

posted @ 2020-04-17 12:11  尘世俗人  阅读(1094)  评论(0编辑  收藏  举报