信息编码:位操作布尔值编码

位操作:布尔值编码

 

位图(Bitmaps)是对布尔信息进行编码的一种非常紧凑的方式,通常用在协议中。位图的主要思想是整型数据中的每一位都能够对一个布尔值编码--通常是0表示false1表示true。要操纵位图,你需要了解如何使用Java中的"位操作"方法来设置和清除单独的一位。掩码(mask)是一个的整数值,其中有一位或多位被设为1,其他各位被清空(即,设为0)。在这里我们处理的是int大小的位图和掩码(32位),但这些方法对其他类型的整数也同样适用。

 我们将int中的各位从031进行编号,其中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

 

posted on 2012-12-19 10:53  吴一达  阅读(161)  评论(0编辑  收藏  举报

导航