Grails逐位运算符

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是一个整数类

有人能解释一下我在Grails(或者groovy)中使用位运算符的问题吗

我正在尝试使用带有标志的域类属性,以下是我迄今为止尝试过的内容-它们都不起作用:

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控制台中运行的失败单元测试,那么帮助您会容易得多。使用groovy
assert
关键字指示测试失败的地方,您期望的是
&
是按位and运算符。
成员的数据类型是什么?在和之前和之后,
memberOf
的值是多少?那么,
manager的类型是什么。memberOf
?更新帖子,谢谢提问!如果您可以将问题重新编写为可以在groovy控制台中运行的失败单元测试,那么帮助您会容易得多。使用groovy
assert
关键字指示测试失败的地方以及您的期望