左移(<<)和右移(>>)
左移: 相当于乘法,左移几位就相当于原来的数成2的几次方。
二进制形式左移一位,多出来的一位补0。
eg. 1 << 5 = 1 * 25 = 32
右移: 相当于除法,右移几位就相当于除以2的几次方。
二进制形式右移一位,就相当于把最右边的一位数顶掉。
1)逻辑右移
不管是什么类型,空缺自动补0;
2)算数右移
若是无符号数,则空缺补0,若是负数,空缺补1;
eg. 16 >> 3 = 16 / 23 = 2
该部分参考文章为:
https://blog.csdn.net/weixin_42837024/article/details/98734787
https://editor.csdn.net/md?not_checkout=1&articleId=115558413
auto用法
1.用于赋予变量类型
auto的原理就是根据后面的值,来自己推测前面的类型是什么。
2.简化变量的初始化
如果这个变量有一个很长很长的初始化类型,就可以用auto代替。
3.用于迭代
对于一个有范围的集合而言,由程序员来说明循环的范围是多余的,有时候还会容易犯错误。因此C++11中引入了基于范围的for循环。for循环后的括号由冒号“ :”分为两部分:第一部分是范围内用于迭代的变量,第二部分则表示被迭代的范围
for(auto &a : b)
例如:
int arr[10];
for(int i=0;i<10;i++)
{
arr[i]=i;
}
for(auto &a : arr)
{
std::cout << a;
}
先将数组中的10格式赋值,然后通过auto式的for循环输出 0 ~ 9 这十个数。
注意点:
1.用auto声明的变量必须初始化(auto是根据后面的值来推测这个变量的类型,如果后面没有值,自然会报错)
2.函数和模板参数不能被声明为auto(原因同上)
3.因为auto是一个占位符,并不是一个他自己的类型,因此不能用于类型转换或其他一些操作,如sizeof和typeid
4.定义在一个auto序列的变量必须始终推导成同一类型
auto x1 = 5, x2 = 5.0, x3='r'; // This is too much....we cannot combine like this
示例:
std::vector<std::string> ve;
std::vector<std::string>::iterator it = ve.begin();
我们可以用atuo来代替那个初始化类型:
auto it = ve.begin();
此外,如果是可用迭代器的对象的话,还可以这样操作:
int main(){
vector<int>v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
for(auto i : v){
cout<<i<<" ";
}
cout<<endl;
return 0;
}
该部分参考文章:
https://blog.csdn.net/lwgkzl/article/details/82110068?utm_medium=distribute.pc_relevant_t0.none-task-blog-2defaultBlogCommendFromMachineLearnPai2default-1.baidujs&dist_request_id=&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2defaultBlogCommendFromMachineLearnPai2default-1.baidujs
https://blog.csdn.net/qq_37264323/article/details/102891185