最近做项目中要取一个long类型的几位,分别取出这几位的值,通过询问同事和问度娘,自己总结了一下:
需求:
我们知道long类型占四个字节,一个字节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&11100000(0xE0),得到10000000,再右移5位,表达式为(10010011&0xE0)>>5
取后三位
10010011&00000111(0x07),得到00000011,表达式为10010011&0x07
取中间三位
10010011&00011100(0x1C),得到00010000,再右移三位,表达式是(10010011&0x1C)>>3
如有错误或者不恰当处,希望各位指出,谢谢
更多IT资讯请关注