我正在从书中学习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;用作逻辑运算符,当它用作按位运算符时。
答案 0 :(得分:2)
我找到了。你的问题在于这一行
if(val & mask)
你需要实际进行比较。像这样:
if((val & mask) != 0)
这既不是c也不是javascript。你不能像他们的布尔一样使用数字。你需要使用实际的布尔值。
答案 1 :(得分:2)
按位运算符将返回long
,因此您必须与某些内容进行比较。只需检查它是否为非零。
if((val & mask) != 0)