Java:如何进行逐位乘法?

时间:2014-09-03 17:55:29

标签: java

我正在学习生成一组的所有子集,并尝试转换以下C程序

#include <stdio.h>
#include <math.h>

void printPowerSet(char *set, int set_size)
{
    /*set_size of power set of a set with set_size
      n is (2**n -1)*/
    unsigned int pow_set_size = pow(2, set_size);
    int counter, j;

    /*Run from counter 000..0 to 111..1*/
    for(counter = 0; counter < pow_set_size; counter++)
    {
      for(j = 0; j < set_size; j++)
       {
          /* Check if jth bit in the counter is set
             If set then pront jth element from set */
          if(counter & (1<<j))
            printf("%c", set[j]);
       }
       printf("\n");
    }
}

/*Driver program to test printPowerSet*/
int main()
{
    char set[] = {'a','b','c'};
    printPowerSet(set, 3);

    getchar();
    return 0;
}

参考:http://www.geeksforgeeks.org/power-set/

我的代码看起来像

private static void printAllSubsets(final Set<Integer> set) {
        final int subsetSize = (int) Math.pow(2, set.size());
        for (int counter = 0; counter< subsetSize; counter++) {
            for (int i = 0; i<set.size(); i++) {
                if(counter & (1 << i)) {

                }
            }
        }
    }

但是我在

上遇到了编译错误
if(counter & (1 << i)) 

Required boolean Found int

如何在此处获得与C代码相同的结果? 我不明白这里的按位操作是怎么回事

由于

1 个答案:

答案 0 :(得分:5)

您可以使用

if ((counter & (1 << i)) != 0)

Java期望if条件中的显式布尔表达式。在C中,!= 0是隐含的。

顺便说一句,请注意您可以使用

final int subsetSize = (1 << set.size());

而不是使用Math.pow和投射。