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


    位操作:布尔值编码

     

    位图(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

     

  • 相关阅读:
    ●BZOJ 2752 [HAOI2012]高速公路(road)
    ●UVA 11021 tunnello
    ●POJ 2794 Double Patience
    【51Nod1555】布丁怪
    【LG1600】[NOIP2016]天天爱跑步
    【LG5171】Earthquake
    【LG4437】[HNOI/AHOI2018]排列
    【CF1097F】Alex and a TV Show
    【51Nod 1769】Clarke and math2
    【LG5330】[SNOI2019]数论
  • 原文地址:https://www.cnblogs.com/wuyida/p/6301080.html
Copyright © 2020-2023  润新知