[导入]有关位运算的一个实例

开发中有同事写了这样一段代码:          
                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
posted @ 2008-06-25 13:40  Jim Gao  阅读(127)  评论(0编辑  收藏  举报