信息编码:位操作布尔值编码
位操作:布尔值编码
位图(Bitmaps)是对布尔信息进行编码的一种非常紧凑的方式,通常用在协议中。位图的主要思想是整型数据中的每一位都能够对一个布尔值编码--通常是0表示false,1表示true。要操纵位图,你需要了解如何使用Java中的"位操作"方法来设置和清除单独的一位。掩码(mask)是一个的整数值,其中有一位或多位被设为1,其他各位被清空(即,设为0)。在这里我们处理的是int大小的位图和掩码(32位),但这些方法对其他类型的整数也同样适用。
我们将int中的各位从0到31进行编号,其中0代表最低位。一般来说,如果一个int值在第i位值为1,其他位都为0的话,该int型整数的值就是2i。因此编号为5的位表示32,编号为12的位表示4096,等等。这里有一些掩码声明的例子:
final int BIT5 = (1<<5);
final int BIT7 = 0x80;
final int BITS2AND3 = 12; // 8+4
int bitmap = 1234567;
要设置int变量中的特定一位,需要将该int值与特定位对应的掩码进行按位或(bitwise-OR)操作(|):
bitmap |= BIT5;
// bit 5 is now one
要清空特定一位,则将该整数与特定所对应的掩码的按位补码(特定位为0,其他位为1)进行按位与(bitwise-AND)操作。Java中的按位与操作符是&,而按位补码操作符~:
bitmap &= ~BIT7;
// bit 7 is now zero
也可以通过将相应的所有掩码进行按位或操作,一次设置和清空多位:
// clear bits 2, 3 and 5
bitmap &= ~(BITS2AND3|BIT5);
要测试一个整数的特定位是否已经被设置,可以将该整数与特定位对应的掩码进行按位与,并将操作结果与0比较:
boolean bit6Set = (bitmap & (1<<6)) != 0;
相关下载:
Java_TCPIP_Socket编程(doc)
http://download.csdn.net/detail/undoner/4940239
文献来源:
UNDONER(小杰博客) :http://blog.csdn.net/undoner
LSOFT.CN(琅软中国) :http://www.lsoft.cn