C++ 中string对象初始化matlab bitsett对象,转换顺序

cout如何输出数值的二进制格式
cout&&hex&&i&&十六
cout&&oct&&i&&八
二进制的赋值是不行的,C/C++里面只能支持八、十、十六进制三种数字型常量。如果真的需要的话,那么只能靠std::bitset来完成,通过调用参数为std::string的构造函数就可以把二进制变成bitset,然后用bitset::to_ulong就可以了。有些程序要处理二进制位的有序集,每个位可能包含的是0(关)或1(开)的值。位是用来保存一组项或条件的yes/no信息(有时也称标志)的简洁方法。标准库提供了bitset类使得处理位集合更容易一些。要使用bitset类就必须要包含相关的头文件。在本书提供的例子中,假设都使用了std::bitset的using声明:
using std::
<font COLOR="#FF.1&
bitset的定义和初始化
表3-6列出了bitset的构造函数。类似于vector,bitset类是一种类模板;而与vector不一样的是bitset类型对象的区别仅在其长度而不在其类型。在定义bitset时,要明确bitset含有多少位,须在尖括号内给出它的长度值:
bitset&32&
bitvec; //32位,全为0。
给出的长度值必须是常量表达式(2.7节)。正如这里给出的,长度值必须定义为整型字面值常量或是已用常量值初始化的整数类型的const对象。
这条语句把bitvec定义为含有32个位的bitset对象。和vector的元素一样,bitset中的位是没有命名的,程序员只能按位置来访问它们。位集合的位置编号从0开始,因此,bitvec的位序是从0到31。以0位开始的位串是低阶位(low-order
bit),以31位结束的位串是高阶位(high-order
表3-6& 初始化bitset对象的方法
bitset&n& b;
b有n位,每位都为0
bitset&n& b(u);
b是unsigned long型u的一个副本
bitset&n& b(s);
b是string对象s中含有的位串的副本
bitset&n& b(s, pos, n);
b是s中从位置pos开始的n个位的副本
用unsigned值初始化bitset对象
当用unsigned
long值作为bitset对象的初始值时,该值将转化为二进制的位模式。而bitset对象中的位集作为这种位模式的副本。如果bitset类型长度大于unsigned
long值的二进制位数,则其余的高阶位置为0;如果bitet类型长度小于unsigned
long值的二进制位数,则只使用unsigned值中的低阶位,超过bitet类型长度的高阶位将被丢弃。
在32位unsigned
long的机器上,十六进制值0xffff表示为二进制位就是十六个1和十六个0(每个0xf可表示为1111)。可以用0xffff初始化bitset对象:
bitvec1is smaller than the initializer
bitset&16&
bitvec1(0xffff);&&&&&&&&&
// bits 0 ... 15
are set to 1
// bitvec2same size as initializer
bitset&32&
bitvec2(0xffff);&&&&&&&
&&// bits 0 ... 15 are set to 1; 16 ... 31 are
32-bit machine, bits 0 to 31 initialized
from0xffff
bitset&128&
bitvec3(0xffff);&&&&&&&&
// bits 32 through
127 initialized to zero
上面的三个例子中,0到15位都置为1。由于bitvec1位数少于unsigned
long的位数,因此bitvec1的初始值的高阶位被丢弃。bitvec2和unsigned
long长度相同,因此所有位正好放置了初始值。bitvec3长度大于32,31位以上的高阶位就被置为0。
用string对象初始化bitset对象
当用string对象初始化bitset对象时,string对象直接表示为位模式。从string对象读入位集的顺序是从右向左:
string strval("1100");
bitset&32&
bitvec4(strval);
bitvec4的位模式中第2和3的位置为1,其余位置都为0。如果string对象的字符个数小于bitset类型的长度,则高阶位将置为0。
string对象和bitset对象之间是反向转化的:string对象的最右边字符(即下标最大的那个字符)用来初始化bitset对象的低阶位(即下标为0的位)。当用string对象初始化bitset对象时,记住这一差别很重要。
不一定要把整个string对象都作为bitset对象的初始值。相反,可以只用某个子串作为初始值:
string str("");
bitset&32& bitvec5(str, 5,
4); // 4 bits
starting atstr[5], 1100
bitset&32&
bitvec6(str, str.size() -
// use last 4
characters
这里用str中从str[5]开始包含四个字符的子串来初始化bitvec5。照常,初始化bitset对象时总是从子串最右边结尾字符开始的,bitvec5的从0到3的二进制位置为1100,其他二进制位都置为0。如果省略第三个参数则意味着取从开始位置一直到string末尾的所有字符。本例中,取出str末尾的四位来对bitvec6的低四位进行初始化。bitvec6其余的位初始化为0。
<font COLOR="#FF.2&
bitset对象上的操作
多种bitset操作(表3-7)用来测试或设置bitset对象中的单个或多个二进制位:
表3-7& bitset操作
b中是否存在置为1的二进制位?
b中不存在置为1的二进制位吗?
b中置为1的二进制位的个数
b中二进制位的个数
访问b中在pos处的二进制位
b.test(pos)
b中在pos处的二进制位是否为1?
把b中所有二进制位都置为1
b.set(pos)
把b中在pos处的二进制位置为1
把b中所有二进制位都置为0
b.reset(pos)
把b中在pos处的二进制位置为0
把b中所有二进制位逐位取反
b.flip(pos)
把b中在pos处的二进制位取反
b.to_ulong()
用b中同样的二进制位返回一个unsigned long值
把b中的位集输出到os流
测试整个bitset对象
如果bitset对象中有一个或多个二进制位置为,则any操作返回true,也就是说,其返回值等于相反,如果bitset对象中的二进制位全为,则none操作返回true。
bitset&32&
// 32 bits, all
bool is_set =
bitvec.any();&&&&&&&&&&&
// false, all bits
bool is_not_set =
bitvec.none();&&&&&
// true, all bits
如果需要知道置为1的二进制位的个数,可以使用count操作,该操作返回置为1的二进制位的个数:
size_t bits_set = bitvec.count(); //
returns number of bits
that are on
count操作的返回类型是标准库中命名为size_t的类型。size_t类型定义在cstddef头文件中,该文件是标准库的头文件stddef.h的版本。它是一个与机器相关的类型,大小可以保证存储内存中对象。
与vector和string中的size操作一样,bitset的size操作返回bitset对象中二进制位的个数,返回值的类型是size_t:
size_t sz = bitvec.size(); //
2. 访问bitset对象中的位
可以用下标操作符来读或写某个索引位置的二进制位,同样地,也可以用下标操作符测试给定二进制位的值或设置某个二进制位的值:
// assign 1 to even numbered bits
for (int index = 0; index != 32; index += 2)
&&&&&&&&&&
bitvec[index] = 1;
上面的循环把bitvec中的偶数下标的位都置为1。
除了用下标操作符,还可以用set、test和reset操作来测试或设置给定二进制位的值:
// equivalent loop using set operation
for (int index = 0; index != 32; index += 2)
&&&&&&&&&&
bitvec.set(index);
为了测试某个二进制位是否为1,可以用test操作或者测试下标操作符的返回值:
if (bitvec.test(i))
// bitvec[i] is
// equivalent test using subscript
if (bitvec[i])
// bitvec[i] is
如果下标操作符测试的二进制位为1,则返回的测试值的结果为true,否则返回false。
3. 对整个bitset对象进行设置
set和reset操作分别用来对整个bitset对象的所有二进制位全置1和全置0:
bitvec.reset();
&& // set all the bits to 0.
bitvec.set();&
set all the bits to
flip操作可以对bitset对象的所有位或个别位按位取反:
bitvec.flip(0);&&
// reverses value
of first bit
bitvec[0].flip(); // also reverses the first bit
bitvec.flip();&&&
// reverses value
of all bits
4. 获取bitset对象的值
to_ulong操作返回一个unsignedlong值,该值与bitset对象的位模式存储值相同。仅当bitset类型的长度小于或等于unsignedlong的长度时,才可以使用to_ulong操作:
unsigned long ulong =
bitvec3.to_ulong();
cout && "ulong = "
操作主要用于把bitset对象转到风格或标准之前风格的程序上。如果bitset对象包含的二进制位数超过的长度,将会产生运行时异常。本书将在节介绍异常(),并在节中详细地讨论它。
5. 输出二进制位
可以用输出操作符输出bitset对象中的位模式:
bitset&32&
bitvec2(0xffff); // bits 0 ... 15 are set to 1; 16 ... 31 are
cout && "bitvec2: "
&& bitvec2
输出结果为:
6. 使用位操作符
bitset类也支持内置的位操作符。定义的这些操作符都只适用于整型操作数,它们所提供的操作类似于本节所介绍的bitset操作。节将介绍这些操作符。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。vector容器类型
&& vector容器是一个模板类,可以存放任何类型的对象(但必须是同一类对象)。vector对象可以在运行时高效地添加元素,并且vector中元素是连续存储的。
&& 与对string类对象的介绍一样,仍然使用简化原型(主要是抛弃了分配器模板参数,使用默认的)。
vector的构造
函数原型:
template&typename T&&& explicit vector();&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& // 默认构造函数,vector对象为空&& explicit vector(size_type n, const T& v = T());&&& // 创建有n个元素的vector对象&& vector(const vector& x);&& vector(const_iterator first, const_iterator last);
注:vector容器内存放的所有对象都是经过初始化的。如果没有指定存储对象的初始值,那么对于内置类型将用0初始化,对于类类型将调用其默认构造函数进行初始化(如果有其它构造函数而没有默认构造函数,那么此时必须提供元素初始值才能放入容器中)。
举例:vector&string& v1;&&&&&&&& // 创建空容器,其对象类型为string类vector&string& v2(10);&&&& // 创建有10个具有初始值(即空串)的string类对象的容器vector&string& v3(5, "hello"); // 创建有5个值为&hello&的string类对象的容器vector&string& v4(v3.begin(), v3.end());& // v4是与v3相同的容器(完全复制)
vector的操作(下面的函数都是成员函数)&bool empty()&&&&&&&&&&&&&&&&&&& // 如果为容器为空,返回true;否则返回falsesize_type max_size()&&&&&&&&&&& // 返回容器能容纳的最大元素个数size_type size()&&&&&&&&&&&&&&& // 返回容器中元素个数& size_type capacity()&&&&&&&&&&& // 容器能够存储的元素个数,有:capacity() &= size()& void reserve(size_type n);&&&&&&&&&&&& // 确保capacity() &= nvoid resize(size_type n, T x = T());&& // 确保返回后,有:size() == n;如果之前size()&n,那么用元素x的值补全。
reference front();&&&&&&&&&&&&&&&&&&&& // 返回容器中第一个元素的引用(容器必须非空)const_reference front()&&&&&&&&&&&&&&&&&& reference back();&&&&&&&&&&&&&&&&&&&&& // 返回容器中最后一个元素的引用(容器必须非空)const_reference back()
reference operator[](size_type pos);&& // 返回下标为pos的元素的引用(下标从0开始;如果下标不正确,则属于未定义行为。const_reference operator[](size_type pos) reference at(size_type pos);&&&&&&&&&& // 返回下标为pos的元素的引用;如果下标不正确,则抛出异常out_of_rangeconst_reference at(size_type pos)&&&&&&&&&&& void push_back(const T& x);&&&&&&&&&&& // 向容器末尾添加一个元素&&&&&&&&& void pop_back();&&&&&&&&&&&&&&&&&&&&&& // 弹出容器中最后一个元素(容器必须非空)
// 注:下面的插入和删除操作将发生元素的移动(为了保持连续存储的性质),所以之前的迭代器可能失效iterator insert(iterator it, const T& x = T());&&&&&&& // 在插入点元素之前插入元素(或者说在插入点插入元素)void insert(iterator it, size_type n, const T& x);&&&& // 注意迭代器可能不再有效(可能重新分配空间)void insert(iterator it, const_iterator first, const_iterator last);
iterator erase(iterator it);&&&&&&&&&& // 删除指定元素,并返回删除元素后一个元素的位置(如果无元素,返回end())iterator erase(iterator first, iterator last); // 注意:删除元素后,删除点之后的元素对应的迭代器不再有效。
void clear()&&&&&&&&&&&&&&&&&&& // 清空容器,相当于调用erase( begin(), end())
void assign(size_type n, const T& x = T());&& // 赋值,用指定元素序列替换容器内所有元素void assign(const_iterator first, const_iterator last);
const_iterator begin()&&&&&&&&& // 迭代序列iterator begin();const_iterator end()iterator end();
const_reverse_iterator rbegin()reverse_iterator rbegin();const_reverse_iterator rend() reverse_iterator rend();
vector对象的比较(非成员函数)
&& 针对vector对象的比较有六个比较运算符:operator==、operator!=、operator&、operator&=、operator&、operator&=。
&& 其中,对于operator==和operator!=,如果vector对象拥有相同的元素个数,并且对应位置的元素全部相等,则两个vector对象相等;否则不等。
&& 对于operator&、operator&=、operator&、operator&=,采用字典排序策略比较。
注:其实只需要实现operator==和operator!=就可以了,其它可以根据这两个实现。因为,operator!=(lhs, rhs) 就是 !(lhs == rhs),operator&=(lhs, rhs) 就是 !(rhs & lhs),operator&(lhs, rhs) 就是 (rhs & lhs),operator&=(lhs, rhs) 就是 !(lhs, rhs)。
vector类的迭代器
&& vector类的迭代器除了支持通用的前缀自增运算符外,还支持算术运算:it + n、it - n、it2 - it1。注意it2 - it1返回值为difference_type(signed类型)。
&& 注意,任何改变容器大小的操作都可能造成以前的迭代器失效。
#include &iostream&#include &cassert&#include &vector&using namespace std;int main(){&&&&vector&string& v(5, "hello");&&&&vector&string& v2(v.begin(), v.end());&&&&&&&&assert(v == v2);&&&&&&&&cout&&"& Before operation"&&endl;&&&&for(vector&string&::const_iterator it = v.begin(); it & v.end(); ++it)&&&&&&&&cout&&*it&&endl;&&&&&&&&v.insert(v.begin() + 3, 4, "hello, world");&&&&cout&&"& After insert"&&endl;&&&&for(vector&string&::size_type i = 0; i & v.size(); ++i)&&&&&&&&cout&&v[i]&&endl;&&&&&&&&vector&string&::iterator it = v.erase(v.begin() + 3, v.begin() + 6);&&&&assert(*it == "hello, world");&&&&cout&&"& After erase"&&endl;&&&&for(vector&string&::size_type i = 0; i != v.size(); ++i)&&&&&&&&cout&&v[i]&&endl;&&&&&&&&assert(v.begin() + v.size() == v.end());&&&&assert(v.end() - v.size() == v.begin());&&&&assert(v.begin() - v.end() == -vector&string&::difference_type(v.size()));&&&&&&&&return 0;}
程序说明:上面程序中用了三个循环输出容器中的元素,每个循环的遍历方式是不一样的。特别需要说明的是,第二个循环在条件判断中使用了size()函数,而不是在循环之前先保存在变量中再使用。之所以这样做,有两个原因:其一,如果将来在修改程序时,在循环中修改了容器元素个数,这个循环仍然能很好地工作,而如果先保存size()函数值就不正确了;其二,由于这些小函数(其实现只需要一条返回语句)基本上都被声明为inline,所以不需要考虑效率问题。
&& 迭代器(iterator)是用来遍历容器内所有元素的数据类型。标准库为每一种标准容器定义了一种迭代器类型。迭代器类型提供了比下标操作更通用的方法:所有标准容器类都定义了相应的迭代器类型,而只有少数的容器支持下标操作。所以,在编写C++程序时,用迭代器遍历容器是一种更通用的方法,也更加安全。一般提供两种类型:iterator和const_iterator。
begin()和end()操作
&& 每种容器都定义了一对命名为begin()和end()的函数,用来返回容器的迭代序列。其中,begin返回的迭代器指向第一个元素,end返回的迭代器指向最后一个元素的下一个位置(实际上是一个不存在的元素),所以迭代序列为[begin(), end())。如果容器为空,那么begin()返回与end()一样的迭代器。
访问容器元素(operator*)
&& 假如迭代器it指向容器的一个元素,那么解引用*it就是该元素的值(注意,不能对end()解引用)。
下一个元素(operator++)
&& 所有迭代器都支持前缀自增运算符,如++it,表示把迭代器移到容器中的下一个元素的位(同样不能对end()运算)。
比较 (operator == or operator !=)
&& 所有迭代器都支持迭代器之间的比较:&& operator ==:如果两个迭代器指向同一元素,那么返回true;否则返回false。(operator != 类似)
bitset模板类
template&size_t N&&&&
&& bitset也是类模板,其模板参数N必须是常量表达式(能够在编译时计算出其值),表示bitset类对象的长度(位的个数)。bitset对象用来作为位容器,方便对位的操作,其元素为位。bitset对象元素的位置编号从 0 到 N - 1,对应着位串从低位到高位。
bitset类对象的构造
它有三个构造函数:
bitset();&&&
&& 初始化所有位都为0&&&& &&&&&&& bitset(unsigned long val);&&&
&& 用unsigned long初始化bitset对象,初始化bitset对象为val的位模式。&&&&&& 如果bitset对象的长度小于val的位数,那么val中多余的高位被丢弃;&&&&&& 如果bitset对象的长度大于val的位数,那么bitset对象的高位将被置为0&&&&
explicit bitset(const string& str, size_t pos = 0, size_t n = -1);
&& 用string对象中从pos下标开始的n个字符来初始化bitset对象(这些字符必须是0或者1)。如果str.size() & pos,那么将抛出out_of_range异常。如果指定的字符序列[pos, pos + n)中有非0、1字符,那么将抛出invalid_argument异常。如果n & str.size() - pos,就只使用str.size() - pos位来初始化bitset对象。如果指定的字符序列中字符个数比bitset对象位数要多,则只使用前面的字符。
&& 初始化规则:[pos, pos + n)序列中最后一个字符对应着bitset对象的低位(第一位),而第一个字符对应着高位。(这点符合我们看待字符串形式的位串的方式:左边是高位,右边是低位)
举例:bitset&16& bs1;&&&&&&&&&&&&&&&&&& // bs1有16位,并全部初始化为0
bitset&16& bs2(0xFFFF);&&&&&&&&&& // bs2有16位,并全部初始化为1bitset&32& bs3(0xFFFF);&&&&&&&&&& // bs3有32位,低16位(0-15)为1,高16位(16-31)为0bitset&8&& bs4(0xFFFF);&&&&&&&&&& // bs4有8位,并全部初始化为1
string test("");bitset&8& bs5(test);&&&&&&&&&&&&& // bs5有8位,并且只使用test串的前八个字符""来初始化,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //&& 所以0-7位为:(注意与源串反向)bitset&8& bs6(test, 4, 3);&&&&&&& // bs6有8位,并且用"100"来初始化,所以0-7位为:
bool any()&&&&&&&&&&&&&&&& // 如果容器内有任意位被置为1,则返回true;否则返回false。bool none()&&&&&&&&&&&&&&& // 如果容器内没有位被置为1,则返回true;否则返回false。bool test(size_t pos, bool val = true);&&&&& // 测试位置pos处的位是否为val(默认测试是否为1)&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& // 如果pos &= size(),那么将抛出异常out_of_range
bool at(size_type pos)&&&& // 返回指定位;如果pos无效,那么将抛出异常out_of_range。reference at(size_type pos);bool operator[](size_type pos)reference operator(size_type pos);
static const size_t bitset_size = N; //容器内的位个数Nsize_t size()&&&&&&&&&&&&& // 返回容器内的位个数Nsize_t count()&&&&&&&&&&&& // 返回被置为1的位的个数
bitset&N&& flip();&&&&&&&&&&&&&&& // 将容器内所有位全部取反bitset&N& operator~();&&&&&&&&&&& // 返回this-&flip();bitset&N&& flip(size_t pos);&&&&& // 将位置pos处的位取反;如果pos &= size(),那么将抛出异常out_of_range。
bitset&N&& reset();&&&&&&&&&&&&&& // 将容器内所有位重置为0bitset&N&& reset(size_t pos);&&&& // 将位置pos处的位置为0;如果pos &= size(),那么将抛出异常out_of_rangebitset&N&& set();&&&&&&&&&&&&&&&& // 将容器内所有位重置为1bitset&N&& set(size_t pos, bool val = true); // 将位置pos处的位置为val(默认为1);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& // 如果pos &= size(),那么将抛出异常out_of_range
unsigned long to_ulong()&& // 返回对应的unsigned long值;如果溢出,则抛出overflow_errorstring to_string()&&&&&&&& // 把bitset对象转换成string对象,其规则是:字符串的第一字符对应容器中最后一位。&&&&&&&& bool operator ==(const bitset&N&& rhs)&& // 如果两容器的位序列完全相等,则返回true;否则返回false.bool operator !=(const bitset&N&& rhs)&& // 如果两容器的位序列不完全相等,则返回true;否则返回false。
bitset&N&& operator&=(const bitset&N&& rhs);&&& // 位串进行&与&运算bitset&N&& operator|=(const bitset&N&& rhs);&&& // &或&运算bitset&N&& operator^=(const bitset&N&& rhs);
bitset&N&& operator&&=(size_t pos);&&&&&&&&& // 逻辑左移pos位(向高位方向移动)bitset&N&& operator&&=(size_t pos);&&&&&&&&& // 逻辑右移pos位(向低位方向移动)bitset&N& operator&&(size_t pos)&&&&& // 返回 bitset&N&(*this) &&= pos.bitset&N& operator&&(size_t pos)&&&&& // 返回 bitset&N&(*this) &&= pos.
非成员函数ostream& operator&&(ostream& os, const bitset&N&& x);&& 相当于调用return os&&x.to_string();istream& operator&&(istream& is, bitset&N&& x);&& 相当于调用: is&& x = bitset&N&(str);&&&&& 其中,当从输入流is提取的字符个数已经有N个时,提取结束;当遇到文件尾时,提取结束;当is中当前字符不是0也不是1时,提取结束。&& 如果没有提取到任何字符就结束了(此时x不变),那么将调用is.setstate(ios_base::failbit)。
bitset&N& operator&(const bitset&N&& lhs, const bitset&N&& rhs);&&& // 返回 bitset&N&(lhs) &= rhs.bitset&N& operator|(const bitset&N&& lhs, const bitset&N&& rhs);&&& // 返回 bitset&N&(lhs) |= rhs.bitset&N& operator^(const bitset&N&& lhs, const bitset&N&& rhs);&&& // 返回 bitset&N&(lhs) ^= rhs.
另外, bitset中的reference定义如下:class reference {public:&&& reference& operator=(bool b};&&& reference& operator=(const reference& x);&&& bool operator~()&&& operator bool()&&& reference& flip();};
其使用举例如下:bitset&8& bs(string(""));bs[2] = 0;&&&&&&&&&& // 此时bs[0]-bs[7]为 bool b = ~x[2];&&&&& // b == 1, bs不变x[2].flip();&&&&&&&& // bs改变:bs[0]-bs[7]为
#include &iostream&#include &cassert&#include &bitset&using namespace std;int main(){&&&&bitset&16& bs1; // bs1有16位,并全部初始化为0&&&&assert(bs1.none());&&&&bitset&16& bs2(0xFFFF); // bs2有16位,并全部初始化为1&&&&assert(bs2.count() == 16);&&&&bitset&32& bs3(0xFFFF); // bs3有32位,低16位(0-15)为1,高16位(16-31)为0&&&&assert(bs3.to_ulong() == 0xFFFF);&&&&bitset&8& bs4(0xFFFF); // bs4有8位,并全部初始化为1&&&&assert(bs4.count() == 8);&&&&string test("");&&&&bitset&8& bs5(test); // bs5有8位,并且只使用test串的前八个字符""来初始化,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&// 所以0-7位为:(注意与源串反向)&&&&assert(bs5.to_ulong() == 0xF8);&&&&bitset&8& bs6(test, 4, 3); // bs6有8位,并且用"100"来初始化,所以0-7位为:&&&&assert(bs6.to_ulong() == 0x04);&&&&&&&&assert((bs5 & bs6) == bitset&8&());&&&&assert((bs5 | bs6) == bitset&8&(string("")));&&&&assert((bs5 ^ bs6) == bitset&8&(string("")));&&&&&&&&bs5[1] = 1; // 此时bs[0]-bs[7]为 &&&&assert(bs5.to_ulong() == 0xFA);&&&&bool b = ~bs5[1]; // b == 0, bs不变&&&&assert(!b);&&&&assert(bs5.to_ulong() == 0xFA);&&&&bs5[1].flip(); // bs改变:bs[0]-bs[7]为 &&&&assert(bs5.to_ulong() == 0xF8);&&&&&&&&assert((bs5 && 4) == bitset&8&(string("")));&&&&bitset&8& bs7(bs5);&&&&bs7 &&= 4;&&&&assert(bs7 == bitset&8&(string("")));&&&&&&&&&&&&bitset&16& bs8;&&&&cout&&"Before input: "&&bs8&&endl;&&&&cout&&"Please input: "&&endl;&&&&cin&&bs8;&&&&cout&&"After input: "&&bs8&&endl;&&&&cout&&"OK! All tests passed."&&endl;&&&&&&&&return 0;}
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:483821次
积分:7358
积分:7358
排名:第844名
原创:231篇
转载:62篇
评论:173条
(1)(1)(4)(1)(1)(2)(3)(2)(7)(2)(3)(3)(3)(3)(1)(2)(2)(5)(4)(4)(5)(4)(4)(10)(10)(4)(4)(3)(7)(3)(6)(8)(7)(5)(1)(8)(4)(1)(23)(1)(21)(11)(1)(2)(7)(8)(11)(26)(23)(3)(12)
linuxsky.blog.chinaunix.netC++_Primer_中文版(第四版)学习笔记_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
13页免费13页免费43页免费45页免费7页免费 8页免费9页免费6页免费6页免费11页免费
喜欢此文档的还喜欢61页免费12页4下载券61页2下载券61页1下载券61页1下载券
C++_Primer_中文版(第四版)学习笔记|C&#8203;+&#8203;+&#8203;的&#8203;学&#8203;习&#8203;资&#8203;料&#8203;,&#8203;望&#8203;对&#8203;此&#8203;感&#8203;兴&#8203;趣&#8203;的&#8203;同&#8203;学&#8203;能&#8203;有&#8203;收&#8203;获
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢

我要回帖

更多关于 matlab bitset 的文章

 

随机推荐