用位运算实现灯的状态控制

题目

假设房间里有8盏灯,用计算机控制。每盏灯用一个二进制位表示,0表示关灯,1表示开灯。程序可以控制8盏灯的初始状态,可以将某一盏灯的状态反一反,即将原来开着的灯关掉或将原来关着的灯打开。

解释一下:
1.“|=”与“+=”类似,指或运算后再赋值
2.<<左移运算符,将灯的位置与flag里字符位对应

#include <iostream>
using namespace std;

int main()
{
	int n1, n2, n3, n4, n5, n6, n7, n8, num, newstate;
	char flag = 0;
	cout << "请输入8盏灯的初始状态(0表示关灯,1表示开灯):";
	cin >> n1 >> n2 >> n3 >> n4 >> n5 >> n6 >> n7 >> n8;

	//设置初始状态
	flag = n1;
	flag |= (n2 << 1);
	flag |= (n3 << 2);
	flag |= (n4 << 3);
	flag |= (n5 << 4);
	flag |= (n6 << 5);
	flag |= (n7 << 6);
	flag |= (n8 << 7);

	cout << "请输入要改变的灯的编号:";
	cin >> num;
	--num;
	flag ^= (1 << num);//实现对应序号灯状态的改变
	/*下面的代码是为了能够输出全部灯的状态
int i=0, j=0, all;
    int a[8] = { 0 };
    all = 0xff & flag;//将char型的flag转为整数型的all
    while (all)
    {
    	a[j] = all % 2;
    	all /= 2;
    	j++;
    }//将all转为二进制(与flag保持一致)
    cout<<"此时全部灯的状态为:";
    for (i = 0; i <8; ++i)
    	cout << a[i];
    	cout<<endl;
	*/
	newstate = flag & (1 << num);//只留下对应序号灯
	newstate = newstate >> num;//将对应灯的状态转至各位
	cout << "新的状态是" << newstate << endl;
	return 0;
}

不加入注释的结果

此为不加注释的结果
加入注释后的结果

此为加入注释后的结果

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值