首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++标准库bitset部类

2013-01-04 
C++标准库bitset类型bitset用于处理二进制位集。是一种类模板。#includebitsetusing std::bitsset1. 定义

C++标准库bitset类型

    bitset用于处理二进制位集。是一种类模板。

#include<bitset>using std::bitsset

1. 定义和初始化

      在定义bitset时,要明确bitset是多少位,须在尖括号中制定它的长度值。

bitset<32> bitvec;

给定的长度必须是常量表达式,也即必须定义为整型字面值常量或const对象。

  (1). 用unsigned之初始化bitset对象

        unsigned long值将转换为二进制的位模式,若bitset类型长度大于unsigned long的二进制位数,则其余高阶位置0;若小于,则使用unsigned long的低阶位,超过bitset的高阶位被丢弃。

注:低阶位-高阶位

bitset:在32位的bitset对象上为例,以0开始的位串是低阶位(low-order bit),以31 位结束的位串是高阶位(hight-order bit)。

word(机器字):在在32位的unsigned long机器上,在不同体系结构的机器上应该有不同的存储方式。引自英文原版C++ Primer 4中【On a machine with 32-bit unsigned long s, the hexadecimal value 0xffff is represented in bits as a sequence of 16 ones followed by 16 zeroes. (Each 0xf digit is represented as 1111 .)】所说的存储方式为低字节在前,高字节在后。以0xffff为例,在机器内的存储方式为:11111111111111110000000000000000,从低阶-->高阶。

关键概念:计算机的内存存储方式

计算机的内存存储方式由CPU决定,不过为了兼容性,现在AMD和INTEL都是用相同的方式存放:低字节放在前面,高字节放在后面。 要明白,后面的内存地址比前面大1,也就是低字节放在地址小的空间,高字节放在地址大的空间。综上所述:无论对于bitset还是计算机机器字的内存存储方式(其实是同一个),只要记住低阶对应于内存地址较小小的空间,高阶对应于内存地址较大的空间。(低対低,高对高,一一对应)。

知道了以上这些,对于bitset的存储方式,就很容易理解了。例:

string str("1111111000000011001101");bitset<32> bitvec5(str,5,4);bitset<32> bitvec6(str,str.size()-4);cout<<"bitvec5:"<<bitvec5<<endl;cout<<"bitvec6:"<<bitvec6<<endl;

输出:bitvec5:00000000000000000000000000001100
         bitvec6:00000000000000000000000000001101

bitvec5用str[5]开始的4个字符子串来初始化。

如果省略第3个参数,则取从开始位置一直到string对象末尾的所有字符,bitvec6用str末尾的4位来初始化。


 

热点排行