当前位置:  开发笔记 > 人工智能 > 正文

if(counter&(1 << j)).这句话是什么意思,它是如何运作的?

如何解决《if(counter&(1<<j)).这句话是什么意思,它是如何运作的?》经验,为你挑选了1个好方法。

我正在研究子序列的算法.请告诉我这句话的意思.程序如下.

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-bit counter; 如果结果不为零(表示已设置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-bit counter; 如果结果不为零(表示已设置j第 - 位counter),则满足条件.

请考虑以下示例.如果counter是320,则其二进制表示为101000000,表示设置第6位(对应于64的值); 让我们测试那一点.通过移位生成位掩码1,其具有二进制表示000000001,向右6个位置,这导致二进制值001000000.价值counter,即:

101000000

&与位掩码和位运算符组合使用位掩码,如下所示:

  101000000
& 001000000
  ---------
  001000000

该值001000000再次对应于64的值; 但是这里并不重要,它只是不重要(因为它有一个非零位,即我们打算检查的位).总的来说,条件

if ( 64 )

很满意.在C的语义(不具有本机布尔数据类型)中,任何非零值在选中时都被视为true if.


第一个循环生成所有可能的组合,第二个循环根据这些组合进行打印。@SarathiShah
推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有