4. 运算符以及表达式

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类型只有两种取值:truefalse
false等价于0true等价于非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 逻辑运算符和表达式

逻辑运算符用于表达式的逻辑操作,有三种:
&&||、!
操作的结果是truefalse;
a&&b:当且仅当a和b的值都为真,结果为true,否则结果为false;
a||b:a或b只要有一个为真,表达式就为真,否则为false;
!a:当a为真时,返回false。a为false0)返回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;
}

运算符优先级如下图:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值