非10进制在Java中的应用

前端时间在看HashMap源码的时候看到static final int DEFAULT_INITIAL_CAPACITY = 1 << 4这种写法,一时不明白为什么不直接写成static final int DEFAULT_INITIAL_CAPACITY = 16?带着这问题咨询了一技术群的大牛们。下面就先从一大神给我举的一列子讲起:


举例1:

假如你系统有一大堆是是否判定:男女,是否已婚,是否vip,是否毕业?你会如何表达?为每条信息设置一个布尔变量?也许大部分人都会这么选择,但是经过对二进制的了解后我会用4为2进制表达为:

0001:男

0010:已婚

0100:vip

1000:毕业

对应移位运算的依次是:1 << 0; 1<<1; 1 << 2; 1 << 3;也许看到这你会问为什么不直接用1,2,4,8数值直接表示,但是继续加大,二进制位数继续增多,10进制就不那么容易阅读了,比如1000 0000 0000 ,用10进制你能一下反应过来么,但是如果用位运算  1 << 11 你是不是就一目了然呢?


任何一数字 & 0010 > 0就表示已婚,这样是不是很清楚很方便呢,并且这种占用的存储空间是最少的,运算也是最快的




举例2:

大家都知道千奇百怪颜色都是由3原色(红,绿,蓝)组成,每种颜色都可以用一个字节(8位2进制)表示,2个位16进制正好一字节,所以颜色习惯的选用6为2进制表示

比如黑色:000000,白色:ffffff,如果你换成10进制的话是不是很难阅读呢



举例3:

java.lang.reflect.Modifier类



    public static final int PUBLIC           = 0x00000001;

    public static final int PRIVATE          = 0x00000002;

    public static final int PROTECTED        = 0x00000004;

    public static final int STATIC           = 0x00000008;

    public static final int FINAL            = 0x00000010;

    public static final int SYNCHRONIZED     = 0x00000020;

    public static final int VOLATILE         = 0x00000040;

    public static final int TRANSIENT        = 0x00000080;

    public static final int NATIVE           = 0x00000100;

    public static final int INTERFACE        = 0x00000200;

    public static final int ABSTRACT         = 0x00000400;


    public static final int STRICT           = 0x00000800;

    static final int BRIDGE    = 0x00000040;

    static final int VARARGS   = 0x00000080;

    static final int SYNTHETIC = 0x00001000;

    static final int ANNOTATION  = 0x00002000;

    static final int ENUM      = 0x00004000;

    static final int MANDATED  = 0x00008000;


该类就大量的使用16进制定义类,成员的修饰符,判断某一类或成员是否具有public权限,我们只需要传入修饰符集与PUBLIC静态变量取“与”如果不为0就表示具有public权   限,实现代码如下

    public static boolean isPublic(int mod) {
        return (mod & PUBLIC) != 0;
    }


总结:

  1. 16进制能够很好的转换成2进制,而且1位16进制正好一个字节,便于阅读
  2. 1 << n能够一目了然的知道二进制的数值是多少,便于阅读
  3. 二进制能够被设计成很好的出来关于是否判断的问题
  4. 二进制具有占用存储空间最小,速度快的有点









  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值