zoukankan      html  css  js  c++  java
  • 位图数据结构原理分析总结

    位图数据结构原理分析总结

    看编程珠玑(第二版)第一章时,因对对位图不明白是怎么运行的所以特地去百度了下,发现写的不是很清楚,所以就参照着两个对我帮助最大的链接做了下总结:

    https://www.iteblog.com/archives/148.html

    http://blog.163.com/xb_stone_yinyang/blog/static/2118160372013625112558579/

    c语言中的for each (i in arr)对应着Java语言的for(int i : arr)

    位图数据结构:

    两个主要运算(32为数组中一个元素的位数,因元素的类型改变,位数随之改变):

    字节位置=数据/32;(采用位运算即右移5位)

    位位置=数据%32;(采用位运算即跟0X1F进行与操作)

    * i >> SHIFT 相当于 i / (2 ^ SHIFT)

    * i << SHIFT 相当于 i (2 ^ SHIFT)

    * i & MASK相当于mod操作 m mod n 运算(即Java中的 m % n)

    0b111中的b(binary,表示该数是二进制),即该数表示二进制中的111,十进制的7

    char arr[] 数组中的每个元素,占用一个字节,因每个字节八位,所以每一位又可以代表一个数字,所以当每一个位数被占用的时候即说明该数字已存在。

    32位机中,char表示1个字节8位,int表示4个字节32位

    char arr[] = new char[3]

    arr[0]就表示第一个字节,第一个字节中的8位(即0~7)

    arr[1]就表示第二个字节,第二个字节中的8位(即8~15)

    arr[2]就表示第三个字节,第三个字节中的8位(即16~23)

    又如 int arr[] = new int[3]

    arr[0]就表示0~3个字节:

    第一个字节中的8位(即0~7)、第二个字节中的8位(即8~15)、第三个字节中的8位(即16~23)、第三个字节中的8位(即24~31)

    arr[1]就表示4~7个字节:

    第一个字节中的8位(即32~39)、第二个字节中的8位(即40~47)、第三个字节中的8位(即48~55)、第三个字节中的8位(即56~63)

    arr[2]就表示8~11个字节:

    第一个字节中的8位(即64~71)、第二个字节中的8位(即72~79)、第三个字节中的8位(即80~87)、第三个字节中的8位(即88~95)

    仔细理解上文中字节的位置位的位置,可以帮助你快速理解位图机制。 

    最后对基本类型占用的字节数和位置不是很清楚的可以参考链接:https://www.cnblogs.com/123hll/p/5805040.html;

    注:此文主要阐述了存放数据的原理,并不涉及任何运算。因本人也是初涉,如有错误或遗漏,还请大神不吝补充指教。

  • 相关阅读:
    Windows Phone开发之路(10) 进军WP的第一个程序
    Windows Phone开发之路(9) Silverlight之动画
    Windows Phone开发之路(13) 触摸
    使用Beetle进行高效的自定义二进制序列化
    网络通讯合并数据发送的重要性和实现原理
    开源网络文件管理工具SmarkNetDisk
    .net socket吞吐能力测试结果
    数值压缩存储方法Varint
    .NET 程序优化不要仅仅盯着代码执行时间
    ActionScript简单实现Socket Tcp应用协议分析器
  • 原文地址:https://www.cnblogs.com/fuhui-study-footprint/p/8350669.html
Copyright © 2011-2022 走看看