java位移

时间:2012-11-03 12:48:57

标签: java

我的代码中有以下行: -

if (( checker & (1 << val)) ) return false;

其中检查器的类型为int,val的类型为int。当我尝试编译时,我得到以下内容: -

q11.java:38: incompatible types
found   : int
required: boolean
        if (( checker & (1 << val)) ) return false;
                      ^
1 error

但是,如果我将代码修改为: -

if (( checker & (1 << val)) > 0 ) return false;

然后我就可以编译源了。但是,我无法理解为什么代码最初不起作用。关于为什么会发生这种情况的一些指示?

3 个答案:

答案 0 :(得分:3)

&是一个应用于两个整数(在if条件中)生成另一个整数的一元。但是,Java在条件中需要boolean个值。

答案 1 :(得分:2)

在Java中,您的条件必须是布尔值,即true或false。它不能是另一种类型。

如果val == 31,您的测试应该如下。

if ((checker & (1 << val)) != 0) return false;

BTW C没有这样的布尔类型。它使用int值。

答案 2 :(得分:1)

与C和C ++不同,if采用整数(在许多其他类型中)并将零解释为false,Java需要ifwhile等中的布尔表达式。由于&是一个产生整数的运算,因此第一个表达式在if的条件下无效。

当您在Java中重写C条件时,需要添加!= 0,而不是> 0。否则,将最高位设置为1的整数将无法通过检查。