位运算符
位运算符作用于整数类型,并把运算对象看成是二进制的集合。位运算符提供检查和设置二进制位的功能,满足左结合律。
但是位运算关于符号位如何处理没有明确的规定,改变符号位的值是一种未定义的行为,所以建议仅将位运算符作用于无符号 型。
左移运算符(<<)在右侧插入值为0的二进制位。
右移运算符(>>)的行为则依赖于其左侧运算对象对象的类型:如果该运算对象是无符号类型,在左侧插入值为0的二进制位,如果
该运算对象是带符号类型,在左侧插入符号位的副本或值为0的二进制位,如何选择要视具体环境而定。
int b,a = 2;
b = a;
a =a << 3;
b = b >> 2;
cout << a << endl; //输出16
cout << b << endl; //输出0
位求反运算符(~)将运算对象逐位求反后生成一个新值,将1置为0,、将0置为1:
unsigned int a = 4;
a = ~a;
cout << a << endl; //输出4294967291
位或运算符(|):如果两个运算对象的对应位置至少有一个为1则运算结果中该位为1,否则为0.
位异或运算符(^):如果两个运算对象的对应位置有且只有一个1则运算结果中该位为1,否则为0.
sizeof运算符
sizeof运算符返回一条表达式或一个类型名字所占的字节数。sizeof运算符满足右结合律,其所得的结果是一个size_t类型。
形式:
形式:
sizeof(type)
sizeof expr
sizeof expr
第二种sizeof返回的是表达式结果类型的大小。
我们可以使用作用域运算符来获取类成员的大小。通常情况下只有通过类的对象才能访问到类的成员,但是sizeof运算符无须我们提
供一个具体的对象,因为想知道类成员的大小无须真的获取该成员。
sizeof运算符的结果部分的依赖于其作用的类型:
一.对char或者类型为char的表达式执行sizeof运算,结果得1
二.对引用类型执行sizeof运算得到被引用对象所占空间的大小
三.对指针执行sizeof运算得到指针本身所占空间的大小
四.对解引用指针执行sizeof运算得到指针指向的对象所占空间的大小,指针不需有效。
五.对数组执行sizeof运算得到整个数组所占空间的大小,等价于对数组中所有的元素各执行一次sizeof运算并将所得结果求和。注
意,sizeof运算不会吧数组转换成指针来处理。
六.对string对象或vector对象执行sizeof运算只返回该类型固定部分的大小,不会计算对象中的元素所占用了多少空间。
我们可以使用作用域运算符来获取类成员的大小。通常情况下只有通过类的对象才能访问到类的成员,但是sizeof运算符无须我们提
供一个具体的对象,因为想知道类成员的大小无须真的获取该成员。
sizeof运算符的结果部分的依赖于其作用的类型:
一.对char或者类型为char的表达式执行sizeof运算,结果得1
二.对引用类型执行sizeof运算得到被引用对象所占空间的大小
三.对指针执行sizeof运算得到指针本身所占空间的大小
四.对解引用指针执行sizeof运算得到指针指向的对象所占空间的大小,指针不需有效。
五.对数组执行sizeof运算得到整个数组所占空间的大小,等价于对数组中所有的元素各执行一次sizeof运算并将所得结果求和。注
意,sizeof运算不会吧数组转换成指针来处理。
六.对string对象或vector对象执行sizeof运算只返回该类型固定部分的大小,不会计算对象中的元素所占用了多少空间。