代码之家  ›  专栏  ›  技术社区  ›  Ibanez1408

Str1[j]=(portData>>j)&0x1;以C#表示的平均值[重复]

c#
  •  0
  • Ibanez1408  · 技术社区  · 7 年前

    我正在研究一种子序列的算法。 请告诉我这句话的意思。

    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<<j))
                    cout << arr[j] << " ";
            }
            cout << endl;
        }
    }
    
    0 回复  |  直到 9 年前
        1
  •  23
  •   Azeem Rob Hyndman    8 年前

    声明:

    if (counter & (1<<j))
    

    检查 j counter 一切就绪。更详细地说,, 1 << j 1 生成一个位掩码,其中只有 J -设置第位。这个 & 接线员随后遮住了信号 J -一点点 柜台 J 柜台 已设置),满足条件。

    柜台 是320,其二进制表示形式是 101000000 ,这意味着设置了第6位(对应于64的值);让我们测试一下这一点。位掩码是通过移位生成的 1. ,它具有二进制表示形式 000000001 ,右侧6个位置,这将生成二进制值 001000000 . 价值 柜台 ,即:

    101000000
    

    结合 & ,它是按位and运算符,位掩码如下:

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

    价值 001000000 再次对应于64的值;然而,这在这里并不重要,重要的是它不是零(因为它有一个非零位,即我们要检查的位)。总的来说,情况

    if ( 64 )
    

    他很满意。在C的语义中(不具有本机布尔数据类型),当使用 if .