我正在研究子序列的算法.请告诉我这句话的意思.程序如下.
void printSubsequences(int arr[], int n) { unsigned int opsize = pow(2, n); for (int counter = 1; counter < opsize; counter++) { for (int j = 0; j < n; j++) { if (counter & (1<
Codor.. 14
该声明:
if (counter & (1<检查是否设置了
j
-th位counter
.更详细地,1 << j
使用移位1
来生成其中仅设置j
第th位的位掩码.然后&
操作员屏蔽了j
-bitcounter
; 如果结果不为零(表示已设置j
第 - 位counter
),则满足条件.请考虑以下示例.如果
counter
是320,则其二进制表示为101000000
,表示设置第6位(对应于64的值); 让我们测试那一点.通过移位生成位掩码1
,其具有二进制表示000000001
,向右6个位置,这导致二进制值001000000
.价值counter
,即:101000000
&
与位掩码和位运算符组合使用位掩码,如下所示:101000000 & 001000000 --------- 001000000该值
001000000
再次对应于64的值; 但是这里并不重要,它只是不重要(因为它有一个非零位,即我们打算检查的位).总的来说,条件if ( 64 )很满意.在C的语义(不具有本机布尔数据类型)中,任何非零值在选中时都被视为true
if
.
1> Codor..:该声明:
if (counter & (1<检查是否设置了
j
-th位counter
.更详细地,1 << j
使用移位1
来生成其中仅设置j
第th位的位掩码.然后&
操作员屏蔽了j
-bitcounter
; 如果结果不为零(表示已设置j
第 - 位counter
),则满足条件.请考虑以下示例.如果
counter
是320,则其二进制表示为101000000
,表示设置第6位(对应于64的值); 让我们测试那一点.通过移位生成位掩码1
,其具有二进制表示000000001
,向右6个位置,这导致二进制值001000000
.价值counter
,即:101000000
&
与位掩码和位运算符组合使用位掩码,如下所示:101000000 & 001000000 --------- 001000000该值
001000000
再次对应于64的值; 但是这里并不重要,它只是不重要(因为它有一个非零位,即我们打算检查的位).总的来说,条件if ( 64 )很满意.在C的语义(不具有本机布尔数据类型)中,任何非零值在选中时都被视为true
if
.
第一个循环生成所有可能的组合,第二个循环根据这些组合进行打印。@SarathiShah