文章目录
- 运算符
- 位运算符
- 类型转换
运算符
#include<iostream>
using namespace std;
int main()
{
// 算术运算符
cout << "1 + 2 = " << 1 + 2 << endl;
cout << "1 + 2 - 3 * 4 = " << 1 + 2 - 3 * 4 << endl;
short a = 3;
long long b = 22345;
cout << "a * b = " << a * b << endl; // short 会转化为long long 再计算
// 复合运算
sum += a;
// 递增递减运算符
int i = 0;
j = ++i; //j = 1,先+再返回
k = i++; //k = 0,先返回再+
// 逻辑运算符
!(1 < 2 && 3 > 5); //逻辑非
1 < 2 && 3 > 5; //逻辑与
1 < 2 || 3 > 5; //逻辑或
// 短路求值
// 逻辑运算会从左边开始计算,如果左侧可以决定结果,则右侧不做计算。
// 条件运算符
i = 0;
cout << (1 < 2 && ++i) ? "true" : "false" << endl;
}
位运算符
移位运算
unsigned char bits = 0xb5;
cout << "bits左移两位:" << (bits << 2) << endl; //乘4
cout << "bits左移两位:" << hex << (bits << 2) << "\n" << dec << (bits << 2) << endl; //hex和dec是控制输出流
位逻辑运算
判断此处~uc1是多少:
int类型–》看首位–》1(负数)–》负数是以补码形式存储–》补码求源码(-1再取反)–》最后四位(1010–>1001–>0110)–》所以 ~uc1 其实是 -6
类型转换
隐式类型转换
short s = 12.3 + 25;
cout << "s = " << s << endl;
cout << "s长度为:" << sizeof(s) << endl;
cout << "12.3 + 25 = " << (12.3 + 25) << endl;
cout << "12.3 + 25 长度为:" << sizeof(12.3 + 25) << endl;
//输出
// s = 37
// s长度为:2
// 12.3 + 25 = 37.3
// 12.3 + 25 长度为:8
// 关系运算中的类型转换
int a = -1;
cout << ((0 < a < 100) ? "true" : "false") << endl; //true,因为逻辑运算从左向右,0<a无论是true还是false,与100比较返回true
强制类型转换
int total = 20, num = 6;
double avg = total / 6;
cout << avg << endl;
// c语言风格
cout << (double)total / num << 6;
// c++风格
cout << double(total) / num << 6;
//c++强制类型转换运算符
cout << static_cast<double>(total) / num << 6;