栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C/C++ 按位运算

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C/C++ 按位运算

在C语言中,字符型变量用char来定义,计算机会为每个字符型变量分配一个字节(Byte)的内存空间,即8bit。

在五子棋(围棋)、熄灯问题等问腿当中,他们有着一个共同的特点——每一个位置只有两种可能的情况,即记录棋盘局势的时候,我们可以选择用0表示白棋,1表示黑棋;记录开关情况时,0表示关灯,1表示开灯。

利用数组固然方便,但是为了节省内存空间,我们可以利用C语言的按位运算来实现上述情况。

基本操作

//获得第i位的码
int getBit(char ch, int i)
{
	return (ch >> (i - 1)) & 1;
}

//对第i位的码进行赋值
void setBit(char &ch, int i, int v)
{
	if (v)
	{
		ch |= v << (i - 1);
	}
	else
	{
		ch &= ~(1 << (i - 1));
	}
}

//对第i位的码进行翻转(0变1,1变0)
void flipBit(char &ch, int i)
{
	ch ^= 1 << (i - 1);
}

测试样例

int main()
{
	char ch;
	for (int i = 0; i < 16; ++i)
	{
		ch = i;
		printf("(int)ch = %dn", ch);
		printf("(bit)ch = ");
		for (int j = 8; j >= 1; --j)
		{
			printf("%d", getBit(ch, j));
		}
		printf("n");
	}
	for (char i = 'a'; i <= 'z'; ++i)
	{
		ch = i;
		printf("(char)ch = %cn", ch);
		printf("(int)ch = %dn", ch);
		printf("(bit)ch = ");
		for (int j = 8; j >= 1; --j)
		{
			printf("%d", getBit(ch, j));
		}
		printf("n");
	}
	return 0;
}

输出情况

(int)ch = 0
(bit)ch = 00000000
(int)ch = 1
(bit)ch = 00000001
(int)ch = 2
(bit)ch = 00000010
(int)ch = 3
(bit)ch = 00000011
(int)ch = 4
(bit)ch = 00000100
(int)ch = 5
(bit)ch = 00000101
(int)ch = 6
(bit)ch = 00000110
(int)ch = 7
(bit)ch = 00000111
(int)ch = 8
(bit)ch = 00001000
(int)ch = 9
(bit)ch = 00001001
(int)ch = 10
(bit)ch = 00001010
(int)ch = 11
(bit)ch = 00001011
(int)ch = 12
(bit)ch = 00001100
(int)ch = 13
(bit)ch = 00001101
(int)ch = 14
(bit)ch = 00001110
(int)ch = 15
(bit)ch = 00001111
(char)ch = a
(int)ch = 97
(bit)ch = 01100001
(char)ch = b
(int)ch = 98
(bit)ch = 01100010
(char)ch = c
(int)ch = 99
(bit)ch = 01100011
(char)ch = d
(int)ch = 100
(bit)ch = 01100100
(char)ch = e
(int)ch = 101
(bit)ch = 01100101
(char)ch = f
(int)ch = 102
(bit)ch = 01100110
(char)ch = g
(int)ch = 103
(bit)ch = 01100111
(char)ch = h
(int)ch = 104
(bit)ch = 01101000
(char)ch = i
(int)ch = 105
(bit)ch = 01101001
(char)ch = j
(int)ch = 106
(bit)ch = 01101010
(char)ch = k
(int)ch = 107
(bit)ch = 01101011
(char)ch = l
(int)ch = 108
(bit)ch = 01101100
(char)ch = m
(int)ch = 109
(bit)ch = 01101101
(char)ch = n
(int)ch = 110
(bit)ch = 01101110
(char)ch = o
(int)ch = 111
(bit)ch = 01101111
(char)ch = p
(int)ch = 112
(bit)ch = 01110000
(char)ch = q
(int)ch = 113
(bit)ch = 01110001
(char)ch = r
(int)ch = 114
(bit)ch = 01110010
(char)ch = s
(int)ch = 115
(bit)ch = 01110011
(char)ch = t
(int)ch = 116
(bit)ch = 01110100
(char)ch = u
(int)ch = 117
(bit)ch = 01110101
(char)ch = v
(int)ch = 118
(bit)ch = 01110110
(char)ch = w
(int)ch = 119
(bit)ch = 01110111
(char)ch = x
(int)ch = 120
(bit)ch = 01111000
(char)ch = y
(int)ch = 121
(bit)ch = 01111001
(char)ch = z
(int)ch = 122
(bit)ch = 01111010

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/768032.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号