开发中有同事写了这样一段代码:
int profilePermission = daAccount.GetUserProfilePermission(info.Liveid);
int permissionMask = 0xffff ^ (XOn.XPROFILE_PERMISSION_SHARE_MUSIC_NOONE | XOn.XPROFILE_PERMISSION_SHARE_MUSIC_FRIENDS);
profilePermission = (profilePermission & permissionMask) | XOn.XPROFILE_PERMISSION_SHARE_MUSIC_NOONE;
daAccount.SaveUserProfilePermission(info.Liveid, profilePermission);
个人觉得位操作的部分可以简化,这样容易让人误解。首先要说的是XOn.XPROFILE_PERMISSION_SHARE_MUSIC_NOONE没有起到作用,其实作者的意思只是想从现有权限中踢掉XOn.XPROFILE_PERMISSION_SHARE_MUSIC_FRIENDS的权限,如果是这样的话,只需profilePermission&(~XOn.XPROFILE_PERMISSION_SHARE_MUSIC_FRIENDS)即可。
原理很简单:我们可以把他的那段代码进行简化,把具体的权限用A和B进行替代,这样就变成
int profilePemission = (profilePemission & (0xffff^(A|B)) )|A;
意思变成提出profilePemission中A和B两块权限,然后再加上A的权限,有点多余了吧,A没有任何作用。
所有只需简单的profilePermission&(~B)即可,理解起来也方便,就是从profilePemission的权限中剔除B权限。
文章来源:http://ejimgao.blog.163.com/blog/static/42030016200852513938387