0

我的代码中有以下行:-

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

其中 checker 是 type int, val 是 type 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;

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

4

3 回答 3

3

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

于 2012-11-03T12:51:48.280 回答
2

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

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

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

BTW C 本身没有布尔类型。它使用一个 int 值。

于 2012-11-03T12:51:11.060 回答
1

与 C 和 C++ 不同, whereif接受整数(在许多其他类型中)并将零解释为false,Java 需要布尔表达式if,while等。由于&是产生整数的操作,因此您的第一个表达式在if.

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

于 2012-11-03T12:51:02.003 回答