美文网首页
二进制在项目中的使用场景

二进制在项目中的使用场景

作者: fyg | 来源:发表于2020-07-14 23:56 被阅读0次
    /**
     * 将一个 int 分为两段,前 16 位存储一级菜单,分别是 美颜、美型、滤镜选项
     * 第 17~24 位存储二级菜单,如美颜的 大眼、瘦脸等,美型选项的 瘦脸、大眼等
     * 最后 8 位存储三级菜单,目前只有美妆选项使用到,如存储美瞳的几种种类,这个还没有集成呢
     */
    public interface ItemGetContract {
        int OFFSET = 16;
        int MASK = ~0xFFFF;
        int SUB_OFFSET = 8;
    
        // 一级菜单
    
        int TYPE_CLOSE = -1;
        // 美颜
        int TYPE_BEAUTY_FACE = 1 << OFFSET;
        // 美型
        int TYPE_BEAUTY_RESHAPE = 2 << OFFSET;
        // 滤镜
        int TYPE_FILTER = 5 << OFFSET;
    
        // 二级菜单
    
        // 美颜
        int TYPE_BEAUTY_FACE_SMOOTH = TYPE_BEAUTY_FACE + (1 << SUB_OFFSET);
        int TYPE_BEAUTY_FACE_WHITEN = TYPE_BEAUTY_FACE + (2 << SUB_OFFSET);
        int TYPE_BEAUTY_FACE_SHARPEN = TYPE_BEAUTY_FACE + (3 << SUB_OFFSET);
        int TYPE_BEAUTY_FACE_BRIGHTEN_EYE    = TYPE_BEAUTY_FACE     + (4 << SUB_OFFSET);
        int TYPE_BEAUTY_FACE_REMOVE_POUCH    = TYPE_BEAUTY_FACE     + (5 << SUB_OFFSET);
        int TYPE_BEAUTY_FACE_SMILE_FOLDS    = TYPE_BEAUTY_FACE   + (6 << SUB_OFFSET);
        int TYPE_BEAUTY_FACE_WHITEN_TEETH    = TYPE_BEAUTY_FACE     + (7 << SUB_OFFSET);
    
        // 美型
        int TYPE_BEAUTY_RESHAPE_FACE_OVERALL = TYPE_BEAUTY_RESHAPE + (1 << SUB_OFFSET);
        int TYPE_BEAUTY_RESHAPE_EYE = TYPE_BEAUTY_RESHAPE + (2 << SUB_OFFSET);
        int TYPE_BEAUTY_RESHAPE_FACE_SMALL = TYPE_BEAUTY_RESHAPE + (3 << SUB_OFFSET);
        int TYPE_BEAUTY_RESHAPE_FACE_CUT = TYPE_BEAUTY_RESHAPE + (4 << SUB_OFFSET);
        int TYPE_BEAUTY_RESHAPE_CHEEK = TYPE_BEAUTY_RESHAPE + (5 << SUB_OFFSET);
        int TYPE_BEAUTY_RESHAPE_JAW = TYPE_BEAUTY_RESHAPE + (6 << SUB_OFFSET);
        int TYPE_BEAUTY_RESHAPE_NOSE_LEAN = TYPE_BEAUTY_RESHAPE + (7 << SUB_OFFSET);
        int TYPE_BEAUTY_RESHAPE_NOSE_LONG = TYPE_BEAUTY_RESHAPE + (8 << SUB_OFFSET);
        int TYPE_BEAUTY_RESHAPE_CHIN = TYPE_BEAUTY_RESHAPE + (9 << SUB_OFFSET);
        int TYPE_BEAUTY_RESHAPE_FOREHEAD = TYPE_BEAUTY_RESHAPE + (10 << SUB_OFFSET);
        int TYPE_BEAUTY_RESHAPE_EYE_ROTATE = TYPE_BEAUTY_RESHAPE + (11 << SUB_OFFSET);
        int TYPE_BEAUTY_RESHAPE_MOUTH_ZOOM = TYPE_BEAUTY_RESHAPE + (12 << SUB_OFFSET);
        int TYPE_BEAUTY_RESHAPE_MOUTH_SMILE = TYPE_BEAUTY_RESHAPE + (13 << SUB_OFFSET);
        int TYPE_BEAUTY_RESHAPE_DECREE = TYPE_BEAUTY_RESHAPE + (14 << SUB_OFFSET);
        int TYPE_BEAUTY_RESHAPE_DARK = TYPE_BEAUTY_RESHAPE + (15 << SUB_OFFSET);
        int TYPE_BEAUTY_RESHAPE_EYE_SPACING = TYPE_BEAUTY_RESHAPE + (16 << SUB_OFFSET);
        int TYPE_BEAUTY_RESHAPE_EYE_MOVE = TYPE_BEAUTY_RESHAPE + (17 << SUB_OFFSET);
        int TYPE_BEAUTY_RESHAPE_MOUTH_MOVE = TYPE_BEAUTY_RESHAPE + (18 << SUB_OFFSET);
    
        interface View extends IView {
        }
    
        abstract class Presenter extends BasePresenter<View> {
            /**
             * 根据类型返回一个 {@link ButtonItem} 列表
             */
            public abstract List<ButtonItem> getItems(int type);
        }
    }
    

    如上代码转换成 二进制后:

    
    一个int 占4个字节32位,转为二进制为:
    
    美颜 定义为1, 左移16位
    美型 定义为2,左移16位
    滤镜 定义为5,左移16位
    
    
    二进制1.png 二进制2.png
    二进制之前的& | ~ ^ 运算请查看我的

    StateMachine项目
    封装了位运算符,使用更加方便

    关注我的github

    https://github.com/fuyuguang
    带你了解更多项目实践中的bug

    相关文章

      网友评论

          本文标题:二进制在项目中的使用场景

          本文链接:https://www.haomeiwen.com/subject/czzqhktx.html