4.1 赋值和算数运算符
赋值运算符用于给变量赋值,常用的有以下六种:
= 、 +=、-=、*=、/=、%=
****算术运算符用于数值运算,运算符+操作数构成表达式
+、-、*、/、++、--、%
a+b、a-b、a*b这三个表达式的值得类型以操作数中精度高的为准;
精度:double > long long > int > short > char
如:2 * 0.5 => 1.0;
加减乘运算的溢出:两个整数加减乘都可能导致计算结果超出了结果类型所能表达的范围.
计算结果的溢出部分直接被丢弃.
浮点数运算也有可能溢出,结果不易预测.
#include<iostream>
#include<stdio.h>
using namespace std;
int main(){
unsigned int n1 = 0xffffffff;
cout<< n1 <<endl; //输出4294967295
unsigned int n2; //导致溢出
n2 = n1 + 3;
cout<< n2 <<endl; //输出2
return 0;
}
有时候最终结果不溢出但是中间结果可能会溢出,也会导致程序出错!!!
解决办法是使用更高精度的类型,如使用long long代替int;
除法运算,保留精度高的类型.
#include<iostream>
#include<stdio.h>
using namespace std;
int main(){
int a = 10;
int b = 3;
double d = a/b; //a/b也是整型3
cout<< d <<endl; //输出3
d = 5/2; //d变为2.0
cout<< d <<endl; //输出2
d = 5/2.0;
cout << d <<endl;//输出2.5
d = (double)a/b;
cout<< d <<endl; //输出3.33333
return 0;
}
取余运算符:
22%5 = 2;
-22%5 = -2;
自增自减运算符:用于整型或者实数型
前置用法: ++a --a;将a的值加/减1,表达式返回a加1后的值
后置用法: a++ a--;将a的值加/减1,表达式返回a加1前的值
4.2 关系运算符
关系运算符一共六种:
==、!=、>、<、>=、<=
比较的结果为bool型,成立为true,反之为false
bool类型只有两种取值:true和false
false等价于0,true等价于非0整型值
#include<iostream>
using namespace std;
int main(){
int n1 = 4, n2 = 5, n3;
n3 = (n1 > n2); //n3的值变为0
cout<< n3 <<endl; //输出0
n3 = (n1 == 4); //n3变为非0值,一般为1
cout<< n3 <<endl; //输出1
n3 = (n1 != 4); //n3变为0
cout<< n3 <<endl; //输出0
n3 = (n1 == n2 -1); //n3变为1
cout<< n3 <<endl; //输出1
return 0;
}
4.3 逻辑运算符和表达式
逻辑运算符用于表达式的逻辑操作,有三种:
&&、||、!
操作的结果是true或false;
a&&b:当且仅当a和b的值都为真,结果为true,否则结果为false;
a||b:a或b只要有一个为真,表达式就为真,否则为false;
!a:当a为真时,返回false。a为false(0)返回true;
逻辑表达式是短路计算的,即岁逻辑表达式的计算在能够断定时就会停止计算,例子如下:
#include<iostream>
using namespace std;
int main(){
int a = 0, b = 1;
bool n = (a++) && (b++); //b不被计算 因为a++返回false
cout<< a <<","<< b <<endl; //输出1,1
n = a++ && b++; //a++和b++都被计算
cout<< a <<","<< b <<endl; //输出2,2
n = a++ || b++; //b++不被计算
cout<< a <<","<< b <<endl; //输出3,2
return 0;
}
4.4 强制类型转换和运算符优先级
类型名本身就是一个运算符,叫“强制类型转换运算符”
用于将操作数转化为指定类型.
#include<iostream>
using namespace std;
int main(){
double d = 9.14;
int n = int(d); //n = 9
d = n / 2; //d = 4.0
d = double(n) / 2; //d = 4.5
return 0;
}
运算符优先级如下图: