Java 如何按位操作?(运算符&;不能应用于整数或整数)

Java 如何按位操作?(运算符&;不能应用于整数或整数),java,android,bitwise-operators,Java,Android,Bitwise Operators,我想检查android应用程序的一些权限,我从一个用于不同设备和编码语言的API获得了这些权限,但这是我第一次尝试使用JAVA(android),而且似乎有所不同 在我的应用程序中,这些权限位于一个类中,该类将它们作为整数返回,因此如果我想检查用户是否可以删除(十进制4),我想执行以下操作: if(MyClass.getBit()&4){ // Is bit 2 on? // Yes, is on } 我得到了以下错误: 必需的布尔值,找到Int 没关系,我可以把它变成布尔值:

我想检查android应用程序的一些权限,我从一个用于不同设备和编码语言的API获得了这些权限,但这是我第一次尝试使用JAVA(android),而且似乎有所不同

在我的应用程序中,这些权限位于一个类中,该类将它们作为
整数返回,因此如果我想检查用户是否可以删除(十进制4),我想执行以下操作:

if(MyClass.getBit()&4){ // Is bit 2 on?
    // Yes, is on
}
我得到了以下错误:

必需的布尔值,找到Int

没关系,我可以把它变成布尔值:

if(MyClass.getBit()&4 != 0){ // Is bit&4 not 0?
    // Yes, it is different
}
我得到一个新错误:

运算符“&”不能应用于“java.lang.Integer”、“boolean”

因此,我将返回值更改为
int
,得到了相同的结果:

运算符“&”不能应用于“int”、“boolean”

看来我走的路不对


如何在Android上按位操作?

这是一个优先问题,您必须添加括号

if ((MyClass.getBit()&4) != 0){ // Is bit&4 not 0?
    // Yes, it is different
}

如果没有括号,它将首先执行(4!=0)部分,返回一个布尔值,然后对该布尔值和左边的整数执行AND运算符。

这是一个优先问题,您必须添加括号

if ((MyClass.getBit()&4) != 0){ // Is bit&4 not 0?
    // Yes, it is different
}

如果没有括号,它将首先执行(4!=0)部分,返回一个布尔值,然后在该布尔值上执行AND运算符,在左侧执行整数。

这解决了问题,与运算符或值类型无关,谢谢!这解决了问题,与运算符或值类型无关,谢谢!仅供参考:文本
4
是二进制数
100
,位从右开始编号,从0开始,因此这将是对位2的测试,而不是对位4的测试。我使用位2(二进制
10
)作为不同的权限(读取perm)。二进制
10
(十进制
2
)是测试位1的掩码,因为,正如我已经告诉过你的,位从右边开始编号,从0开始。请使用正确的术语。二进制
1
(十进制
1
)测试位0。二进制
10
(十进制
2
)测试位1。二进制
100
(十进制
4
)测试位2。二进制
1000
(十进制
8
)测试位3。二进制
10000
(十进制
16
)测试位4。等等……我明白你的意思了,我编辑了我的问题以避免使用“位”字,并将
位4
更改为
位2
。仅供参考:字面
4
是二进制数
100
,位从右边开始编号,从0开始,这将是对位2的测试,而不是位4。我使用的是位2(二进制
10
)对于不同的权限(读取perm),二进制
10
(十进制
2
)是测试位1的掩码,因为正如我已经告诉过您的,位从右边开始编号,从0开始。请使用正确的术语。二进制
1
(十进制
1
)测试位0。二进制
10
(十进制
2
)测试位1。二进制
100
(十进制
4
)测试位2。二进制
1000
(十进制
8
)测试位3。二进制
10000
(十进制
16
)测试位4。等等……我明白你的意思了,我编辑了我的问题以避免使用“位”字,并将
位4
更改为
位2