复习位运算符时想到的比较有趣的一道题:
班上有30位同学,如何使用一个数,来表示一个班每个同学考试通过的情况,要能知道每位同学对应的通过情况(通过或者未通过)。
解答:
通过或者未通过两种情况很容易想到二进制0和1,这时可以令1为通过,0为未通过,但是直接以一个二进制数来表示未免有点太简单。
显然全班的检测结果可以用一个无符号整数来表示:
unsigned long quiz1 = 0;
//全班成绩初始化为0。用UL,这样quiz1在任何机器上都拥有至少32位
例如,我们需要对27号学生进行对应的设置,以表示他通过测试,为达到这个目的,需要首先设置一个值,该值只有27位是1,其余位都是0:
1UL << 27; //生成一个值,该值只有第二十七位为1
接下来进行位运算,将所得的值与quiz1进行位或运算,为了更新quiz1的值,使用一条复合赋值语句:
quiz1 |= 1UL << 27; //表示学生27号通过测试
像这样,如果得到00010111110101110111011111011010110,转换成八进制就是027656737326,这样就可以表示全班的成绩了。