Java 如何按位操作?(运算符&;不能应用于整数或整数)
我想检查android应用程序的一些权限,我从一个用于不同设备和编码语言的API获得了这些权限,但这是我第一次尝试使用JAVA(android),而且似乎有所不同 在我的应用程序中,这些权限位于一个类中,该类将它们作为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 没关系,我可以把它变成布尔值:
整数返回,因此如果我想检查用户是否可以删除(十进制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
。