zoukankan      html  css  js  c++  java
  • [导入]有关位运算的一个实例

    开发中有同事写了这样一段代码:          
                    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
  • 相关阅读:
    中文转数字
    半角全角互转
    sql快速查记录数
    杀进程批处理
    线程基本用法
    sql游标用法示例
    BUGFREE的使用
    SQL常用函数
    ASP.NET 2.0 下的验证码控件
    经典sql语句
  • 原文地址:https://www.cnblogs.com/gaomin/p/1294119.html
Copyright © 2011-2022 走看看