`
cheer_nice
  • 浏览: 103136 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

BitSet 原理&位操作&基本类型的大小

    博客分类:
  • j2se
阅读更多

因为在看编程珠玑 第一章讲到了 用BitSet来对N多数字进行排序

java中无疑提供了 bitSet 看了看源码 又找了找文章 了解了一些,此外暴漏了自己的基础知识不牢靠  对基本类型byte int long的认识不足 以及对位操作的差劲!!!!

 

BitSet 

java.util 包下面, jdk实现是通过 long数组来存储的

 

private long[] words;
 

因此最小的BitSet也有64位,如果感觉浪费 可以考虑自己实现一个BitSet。此外,BitSet可以自己增长,但是注意的是BitSet都是64的倍数。 size() 方法返回的也是64的倍数。

 

 

个人感觉BitSet 的应用场合是 对空间要求比较的严格,并且数字很多,而且数字各异,BitSet提供了很多方法,例如 与,或等位操作。

 http://www.cnitblog.com/weiweibbs/archive/2008/09/11/49009.html

 

此外应该会进行BitSet的操作

void set(int i) { a[i>>SHIFT] |= (1<<(i & MASK)); }

 

void clr(int i) { a[i>>SHIFT] &=~(1<<(i & MASK)); }

 

int test(int i) { return a[a>>SHIFT] & (i & MASK); }

 

这几个方法是 《编程珠玑》上的 表示方法 其实 对于long数组来说 SHIFT应该是6

MASK 0xffffffffffffffffL

 

对应java.util.BitSet来说 应该是 set(int) clear(int) get(int)不过这个get方法返回的是boolean

 

---------------------------------------------------------------------------------------------------------

此外, byte   short   int    long 。 byte 8位: -128----127;short 16位: -pow(2,16) ---  pow(2,16)-1;

int 32位: -pow(2,32) ---  pow(2,32)-1;  long 64位  -pow(2,64) ---  pow(2,64)-1。

而Double 是浮点数表示了      2-1074  ---- (2-2-52)·21023.

 

char作为16位无符号整形 其范围为 0 -- 2的15次方 这无可争议 http://www.sunxin.org/article/445.html

-----------------------------------------------

http://developer.51cto.com/art/200804/69978.htm   位操作 应该给予重视 都忘了。。。

 

 

1+(33>>5)  注意 +的优先级 大于 >>的

 

 

 

分享到:
评论

相关推荐

    c++ bitset实现

    8. **性能优化**:自定义`bitset`可能包含一些针对特定场景的优化,比如位操作的流水线处理,或者使用SIMD(单指令多数据)指令来加速位操作。 `main.cpp`可能是测试这些功能的主程序,通过创建`bitset`对象,执行...

    java 原生包 BitSet 源码

    Java中BitSet类是Java集合框架的一部分,它是一种用于处理位操作的高级数据结构。BitSet可以看作是一个只存储布尔值的数组,但相比于原始的布尔数组,BitSet更加内存高效,因为它以64位的块(word)来存储多个布尔值...

    前端项目-bitset.js.zip

    - **位操作**:库提供了一系列API,如`set(i)`设置第i位为1,`clear(i)`清除第i位,`flip(i)`翻转第i位,`get(i)`获取第i位的值。 - **位运算**:支持并(`or()`)、交(`and()`)、差(`xor()`)和非(`not()`)...

    浅谈Java BitSet使用场景和代码示例

    BitSet 的底层实现是使用 long 数组作为内部存储结构的,所以 BitSet 的大小为 long 类型大小(64 位)的整数倍。它有两个构造函数:BitSet() 和 BitSet(int nbits)。BitSet() 创建一个新的位 Set,默认大小是 64 位...

    位视图文件分配 vc6.0

    接着,我们使用位操作函数来设置或清除相应的位,表示文件的分配和释放状态。 例如,以下是一个简化的示例代码片段,演示如何在VC6.0中使用位视图分配和释放空间: ```cpp #include #include // 定义位视图大小...

    用位示图管理磁盘空间的分配与回收

    `BitSet`是一个动态增长的位向量,支持基本的位操作,如设置、清除和测试位。以下是一个简单的示例,展示如何创建和使用位示图: ```java import java.util.BitSet; public class Bitmap { private BitSet ...

    bitwiser-0.0.2.zip

    位操作在计算机科学和编程中起着至关重要的作用,因为它们是计算机硬件处理数据的基本方式。位(bit)是信息的最小单位,一个二进制数,可以是0或1。通过对位进行操作,我们可以高效地处理内存、执行计算和实现各种...

    操作系统用位示图管理磁盘的空间的分配与回收

    位示图的工作原理是,假设磁盘被划分为固定大小的存储单元(例如512字节的扇区),然后创建一个与这些存储单元数量相等的位数组。在这个位数组中,每一位对应磁盘上的一个存储单元,如果该存储单元未被分配,则位为0...

    sha512C++源码下载

    2. **位操作优化**: 使用C++标准库提供的`std::bitset`或位操作符进行高效位操作。 3. **效率考虑**: SHA512算法计算密集,尽量使用编译器优化选项提高运行速度。 4. **错误处理**: 考虑输入数据的有效性和边界情况...

    kkk.rar_KKK,是代码吗

    VC++提供了一些内置的库函数和类型,如`std::bitset`和`std::stringstream`,可以帮助程序员实现这些转换。 在“新建 文本文档 (3).txt”这个文件名中,尽管我们无法看到具体的文件内容,但通常源代码会被保存在...

    DES.rar_C++ 加密解密_des解密

    同时,需要注意位操作的正确性和效率,因为DES算法涉及到大量的位移和位操作。 标签中的“c++_加密解密”表明这是C++编程领域的知识,而“des解密”特别提到了DES算法的解密部分。这个项目可能包含了如何在C++环境...

    进制转换工具

    例如,你可以通过设置或清除某一位来改变一个布尔状态,或者在进行位与(&)、位或(|)、位异或(^)等位运算时,逐位操作二进制数。 在实际应用中,这种工具可以帮助程序员快速验证逻辑,也可以教育初学者理解...

    操作系统课程设计模拟os文件系统

    操作系统课程设计的目标是模拟一个...此外,可以使用bitset库来处理位示图,简化对磁盘空间的管理,通过数组索引来代替直接操作内存地址。在分配和释放盘块时,不仅要更新位示图,还要在FAT中记录文件数据的盘块序列。

    关于向量容器和C++Primer中容易让人忽略的几点细节

    - `count()`和`size()`:这两个函数返回`size_t`类型的值,表示位集的大小或设置位的数量。`size_t`定义在`&lt;cstddef&gt;`头文件中。 3. MFC(Microsoft Foundation Classes)编程原理 - 应用程序实例标识:在W32 SDK...

    STL Source3.3

    `bitset`是STL中的位集类,它允许我们高效地处理位操作。在计算机科学中,位操作对于处理二进制数据、内存管理等场景非常关键。`bitset`提供了如设置、清除、测试单个位以及与、或、异或等位运算的方法。 `deque`...

    ocaml-bitpath:有效的位字符串类型以及用于对可变长度位字符串上的数据进行分区的容器

    在计算机科学中,位操作是底层计算的关键部分,特别是在内存有限或者需要高度优化性能的场合。`ocaml-bitpath` 提供了一个强大的接口来创建、操作和分析位字符串,使得开发者能够以更直观和方便的方式处理这些二进制...

    海量数据去重排序bitmap(位图法)在java中实现的两种方法

    海量数据去重排序bitmap(位图法)在java中实现的两种...位图法是一种高效的解决海量数据去重排序问题的方法,Java中提供了多种实现方式,例如使用BitSet类或基本类型数组。选择合适的实现方式取决于具体的需求和场景。

    二进制加减

    这样做的好处是,两个补码表示的数相加,无论它们是正还是负,都可以通过简单的位操作完成,而无需额外的逻辑判断。 二进制加法在补码表示下依然遵循基本的算术规则,例如: ``` 0101 (5) + 1011 (-3) ------- ...

Global site tag (gtag.js) - Google Analytics