这两个c++的for 语句没看懂。哪位dalao解释一下

如题所述

这个程序就很牛逼了,凡是基于位运算的程序基本上都挺牛逼的。
首先第一个循环条件是 i <(1 << n);1 << n结果是2 的 n次幂;
再看内部循环条件 j < n ;控制1 的左移位数;
下面看这组2进制数据 1 10 11 100 101 110 111
下面看if条件 i & 1 << j;这里是与运算 只要是二者在2进制位相同的位置上有1结果就不为0就执行, 例如i = 8到15时 2进制表示为1000 1001 1010 1011 1100 1101 1110 1111
1的2进制为表示为0001,
当i = 8 ,i 的 2 进制表示 为1000,此二进制里只有一个1 所以结果必然只有一个数 当 j = 3 时 1 左移 j 位 为1000, 所以当前行显示为3.
当i = 9时 i 的 2进制表示为 1001,此二进制里有两个1 所以结果中有两个数, 当 j = 0时
1 左移 j 位 为 0001 与1001做与运算结果为0001,故显示0 然后j = 3时 1 左移 j 位 为1000, 所以显示为3. 所以当前行显示为0 3
由此可以看到用2进制中1的个数和位置来显示结果,也就是说1 ~ 10(2进制)中为{0,1,2......,n - 1}从左开始到0的子集, 10 ~ 100中为从左开始到1的子集,中为从左开始到1的子集,100 ~ 1000中为从左开始到2的子集.......一直到2的n-1次方 ~ 2 的n次方 为从左到n - 1的子集。
懂了吧?
温馨提示:答案为网友推荐,仅供参考