一、位运算符
1.位运算对象如果是“小整形”,它的值会被自动提升成较大的整数类型
2.运算对象可以带符号,但是其符号位如何处理是一种未定义行为,所以建议位运算用于处理无符号类型
3.用于IO操作的<< >>其实是移位运算符的重载版本,满足左结合律
二、sizeof运算符
1.sizeof返回一条表达式或一个类型名字所占的字节数,值是一个size_t类型,使用方式如下
int a = 4;
auto size1 = sizeof(int);
auto size2 = sizeof(a); auto size2 = sizeof a;
2.c++11允许使用作用域运算符来获取类成员大小
struct node
{
int right, left;
};
void solve()
{
node a;
auto size1 = sizeof a.right;
auto size2 = sizeof node::right; //等价于上一种,不必通过具体的对象来获取成员大小
}
3.对于指针类型,sizeof并不会真正的解引用指针来知道对象的类型,所以sizeof的运算对象是一个无效指针仍是安全的
node *a;
auto size1 = sizeof *a;
4.对数组(名)执行sizeof运算得到整个数组所占空间的大小,可以用整个数组的大小除以单个数组大小得到元素个数,sizeof运算不会把数组转成指针来处理
auto num = sizeof(a) / sizeof(*a);
5.对string或vector等对象执行sizeof运算只返回该类型固定部分的大小,不会计算对象中元素占了多少空间
vector<int>a{ 1,2,3,4,5,6,9,7,4,5,6,6,5 };
cout << sizeof a << '\n' << sizeof(vector<int>) << '\n' << sizeof(vector<ll>);
//三个输出结果相同
三、逗号运算符
1.先对左侧表达式求值,然后将求值结果丢弃掉,真正结果是右侧表达式,如果右侧对象是左值,那么最终求值结果也是左值
|