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;
}
}