字节、bit、16进制

1. 1个字节是8位:

    二进制8位:xxxxxxxx ,范围:00000000-11111111,表示0到255。

2. 16进制数:

    一位16进制数(0-F),用二进制表示是xxxx,范围:0000 - 1111,表示:0到16。

    16进制要表示1个字节,需要到255,此时就还需要第二位,0x3E。

    所以:1个字节=2个16进制字符,一个16进制位=0.5个字节。

    十六进制是计算机中数据的一种表示方法。它的规则是“逢十六进一”。

     注意:对于任何一个数,我们可以用不同的进位制来表示。比如:十进数57(10),可以用二进制表示为11001(2),也可以用五进制表示为212(5),也可以用八进制表示为71(8)、用十六进制表示为39(16),它们所代表的数值都是一一样的。

4. 逻辑算法

    & 按位与,  | 按位或 ,  ^ 按位异或

    AND (位与&)  OR ( 位或| )  XOR ( 位异或^ )

    1 & 1 = 1,     1 | 1 = 1,     1 ^ 1 = 0

    1 & 0 = 0,     1 | 0 = 1,     1 ^ 0 = 1

    0 & 1 = 0,     0 | 1 = 1,     0 ^ 1 = 1

    0 & 0 = 0,     0 | 0 = 0,     0 ^ 0 = 0

5. 取出一个字节的某几位

    说明:一个字节8位,所以long类型32位,这里要求取出前13位,中间8位,后11位。

    public void getSplitId(long id) {

        Integer deviedId;

        //前13位

        Integer areaId = (int) (id >> 19);

        //中间8位

        deviedId = (int) ((id >> 11) & 0xff);

        //后11位

        Integer channelId = (int) (id & 0x00001fff);

}

例如:10010011

取前三位:(10010011 & 0xE0) >> 5 或者 (10010011 >> 5) & 0x07 

取后三位:10010011 & 0x07

6. 判断byte第几位是否为1

    /**

    * 判断byte第几位是否为1

    * @param b  byte

    * @param pos 第几位:从低位0开始(判断最高位,则pos为7)

    * @return

    */

    public static boolean bytePositionOn1(byte b, int pos) {

        if( (b&(0x1<

            return true;

         }else {

            return false;

        }

    }

你可能感兴趣的:(字节、bit、16进制)