Grails逐位运算符
有人能解释一下我在Grails(或者groovy)中使用位运算符的问题吗 我正在尝试使用带有标志的域类属性,以下是我迄今为止尝试过的内容-它们都不起作用:Grails逐位运算符,grails,groovy,bitwise-operators,Grails,Groovy,Bitwise Operators,有人能解释一下我在Grails(或者groovy)中使用位运算符的问题吗 我正在尝试使用带有标志的域类属性,以下是我迄今为止尝试过的内容-它们都不起作用: manager.memberOf &= 0x04 manager.memberOf = manager.memberOf & 0x04 manager.memberOf = manager.memberOf.and(0x04) 有什么想法吗?我完全不知所措 蒂亚, 球体 ps:manager.memberOf是一个整数类
manager.memberOf &= 0x04
manager.memberOf = manager.memberOf & 0x04
manager.memberOf = manager.memberOf.and(0x04)
有什么想法吗?我完全不知所措
蒂亚,
球体
ps:manager.memberOf是一个整数类型,默认值为0(零)
ps2:memberOf在任何这些操作之后保持为零按位
&
运算符接受两个参数。如果这些参数中的任何一个为0,则结果将为0。在您的情况下,结果总是0,因为其中一个参数(manager.memberOf
的初始值)是0。按位&
运算符接受两个参数。如果这些参数中的任何一个为0,则结果将为0。在您的情况下,结果总是0,因为其中一个参数(manager.memberOf的初始值)是0。如果要设置位,必须使用OR运算符(union)
然后,当您想要检查标志是否已启用时,首先必须使用与AND运算符(交叉点)相同的掩码从字节中仅获取位,并与掩码进行比较。如果与掩码相同,则该位已启用;如果为0,则该位已禁用
(manager.memberOf & MANAGER) == MANAGER
完整工作示例:
def MANAGER = 1
def ADMIN = 2
def CLIENT = 4
def manager = [memberOf:0]
// Add to the MANAGER
manager.memberOf |= MANAGER
assert (manager.memberOf & MANAGER) == MANAGER
assert (manager.memberOf & ADMIN) == 0
assert (manager.memberOf & CLIENT) == 0
如果要设置位,必须使用OR运算符(union) 然后,当您想要检查标志是否已启用时,首先必须使用与AND运算符(交叉点)相同的掩码从字节中仅获取位,并与掩码进行比较。如果与掩码相同,则该位已启用;如果为0,则该位已禁用
(manager.memberOf & MANAGER) == MANAGER
完整工作示例:
def MANAGER = 1
def ADMIN = 2
def CLIENT = 4
def manager = [memberOf:0]
// Add to the MANAGER
manager.memberOf |= MANAGER
assert (manager.memberOf & MANAGER) == MANAGER
assert (manager.memberOf & ADMIN) == 0
assert (manager.memberOf & CLIENT) == 0
&
是按位and运算符。成员的数据类型是什么?在和之前和之后,memberOf
的值是多少?那么,manager的类型是什么。memberOf
?更新帖子,谢谢提问!如果您可以将问题重新编写为可以在groovy控制台中运行的失败单元测试,那么帮助您会容易得多。使用groovyassert
关键字指示测试失败的地方,您期望的是&
是按位and运算符。成员的数据类型是什么?在和之前和之后,memberOf
的值是多少?那么,manager的类型是什么。memberOf
?更新帖子,谢谢提问!如果您可以将问题重新编写为可以在groovy控制台中运行的失败单元测试,那么帮助您会容易得多。使用groovyassert
关键字指示测试失败的地方以及您的期望