char类型数据位操作处理,清零设值取值

Posted xingzhensun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 & 0x30);
		else if (i == 7)
			byt = byt ^ (byt & 0x40);
	}

	//	将某位设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 | 0x30;
		else if (i == 7)
			byt = byt | 0x40;
	}

	//	取出某位
	//
	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 & 0x30);
		else if (i == 7)
			return int(byt & 0x40);

		return 0;
	}

private:
	unsigned char byt;


// 	&	与	两个位都为1时,结果才为1
// 	|	或	两个位都为0时,结果才为0
// 	^	异或	两个位相同为0,相异为1
// 	~	取反	0变1,1变0
// 	<<	左移	各二进位全部左移若干位,高位丢弃,低位补0
// 	>>	右移	各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移)
};

  

以上是关于char类型数据位操作处理,清零设值取值的主要内容,如果未能解决你的问题,请参考以下文章

C语言中怎么计算一个类型的取值范围?如 char 用程序算

char类型的取值范围是

64位系统下C语言中int值的取值范围

char(int……)类型取值范围

char取值范围

数据类型取值范围计算