Java中的ShowBits类来自" Java:初学者指南"

时间:2014-10-20 16:33:39

标签: java bit-manipulation

我正在从书中学习Java" Java:初学者指南"作者:Herbert Schildt。我正在编写该书的代码,可以打印任何数字的位模式。这是代码:

class ShowBits{
    int numbits;

    ShowBits(int n){
        numbits = n;
    }

    void show(long val){
        long mask = 1;

        mask<<=numbits-1;

        int spacer=0;
        for(;mask!=0;mask>>>=1){
            if(val & mask) System.out.print("1");
            else System.out.print("0");
            spacer++;
            if((spacer % 8)==0){
                System.out.print(" ");
                spacer=0;
            }
        }
        System.out.println();
    }
}

但是它给出了这个错误:

  

错误:不兼容的类型:long无法转换为boolean             if(val&amp; mask)System.out.print(&#34; 1&#34;);

如何避免错误? 以及编译器何时理解&amp;用作逻辑运算符,当它用作按位运算符时。

2 个答案:

答案 0 :(得分:2)

我找到了。你的问题在于这一行

if(val & mask)

你需要实际进行比较。像这样:

if((val & mask) != 0)

这既不是c也不是javascript。你不能像他们的布尔一样使用数字。你需要使用实际的布尔值。

答案 1 :(得分:2)

按位运算符将返回long,因此您必须与某些内容进行比较。只需检查它是否为非零。

if((val & mask) != 0)