C++ 位操作与操作小练习,控制8盏灯的开关
#include <iostream> using namespace std; #include<string> //判断1个字节某个位是0或者是1 传入一个字节和要查询的位 bool decide(unsigned char& status,int num) { // 左移操作, 并让传入的变量取与操作,如果得到的结果不为0,则表示有该位为1,否则则表示该值为0 unsigned char mask = 1 << num; return status & mask; } //将一个字节中的一个位置的元素置为1,并不能修改其他位的数据, //将1左移,并使用或运算 unsigned char Set_Eml(unsigned char& status, int num) { unsigned char mask = 1 << num; return status | mask; } //将一个字节中的一个位置的元素置为1,并不能修改其他位的数据, //将1左移并取反,并使用与运算 unsigned char Set_Em0(unsigned char& status, int num) { unsigned char mask = ~(1 << num); return status & mask; } //打印8盏灯的状态 1为亮 0为灭 void printf_status(unsigned char& status) { printf("第8盏灯\t第7盏灯\t第6盏灯\t第5盏灯\t第4盏灯\t第3盏灯\t第2盏灯\t第1盏灯\n"); for (int i = 7; i >= 0; i--) { if (decide(status, i) == 1) { cout << " 亮\t"; } else { cout << " 灭\t"; } } printf("\n"); } int main() { //0001 0011 unsigned char status = 0x13; //将status的第3位置为1 00010111 unsigned char status1=Set_Eml(status, 3); //将status的第5位置为0 00000011 unsigned char status2=Set_Em0(status, 4); printf_status(status); printf_status(status1); printf_status(status2); return 0; }
最后打印的结果为: