题目
假设房间里有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;
}
不加入注释的结果
加入注释后的结果