《专题:C++语法基础》篇三:C++中的算术运算、赋值运算

本文主要解决以下几个问题:

1、C++中的算术运算
2、C++中的赋值运算
3、自增和自减运算符
4、强制类型转换


一、算术运算

1、基本运算符:+:表示数学上的加法运算
- :表示数学上的减法运算,该符号有两种含义,即当其左面没有运算数时表示负号(如:-3),此时改运算符为一元运算符。
*:表示数学上的乘法运算
/:表示数学上的除法运算
%:取模运算,获得运算符左边数除以右边数的余数,只适用于整型数,且最好在正整数的情况下使用。
注:一元运算符指的是该运算符的运算对象只有一个,如:-9;而相应的二元运算符指的是运算对象有一对,如:8-4。

2、不同类型数据间的运算规则
C++中可参与算术运算的数据类型包括:整型、实型、字符型、布尔型。
C++进行计算的基本原则是:同类型的数据运算,即int型与int,char型与char型等。运算的结果与运算类型相同。对于不同的类型,C++会在运算前按照一定的规则把类型转换为同一种再进行运算,转换的总原则是:非标准型转换为标准型、占用空间少的向占用空间多的靠拢、数值范围小的向数值范围大的靠拢。具体地说,如下:

类型 是否标准型 运算转换类型 运算结果类型
bool、char、short no int int
int、float yes float float
int、double yes double double
double、float yes double double

3、优先级和结合性
当一个表达式中存在不止一个运算符时,运算就需要一定的规则来约束,C++中+-*/的运算优先级与日常使用的数学表达一样,即:*、/高于+、-对于优先级相同的运算符,系统按照左结合性来确定其运算顺序,即运算是从左至右进行的。比如2+7*5/3-2,运算时依次进行7*5,/3,+2,-2。

二、赋值运算

1、所谓赋值运算,指的是将运算符=右边的值赋予左边的变量。赋值运算要求左边的变量类型和右边是一致的,如果不一致,C++会先进行类型转换然后再进行赋值,赋值转换的规则如下:
1)将实型值赋值给整型时,只保留整数部分,如执行int a=1.5,a的值为1。
2)将整型赋值给float和double型时,不改变数值增加有效位数保存,如double b=1,则b=1.0
3)将double赋值给float时,截取有效位数的前7位保存,如float c=1.090909090909,则c=1.0909090
4)将字符型数据赋给整型变量时,将数据放入整型的最后一个字节。
5)将整形变量赋值给字符型时,直接将整形变量的最后8位赋值给字符变量。

例子:不同类型数据赋值时的转换规则

 /*
*赋值运算中,验证基础数据类型的有效位数
*@version 20161226
**/

#include<iostream>
using namespace std;

int main(){
    int a = 1.5;
    cout << "int a=1.5,a=" << a<<endl;

    double c = 1.234567890;
    float f = c;
    cout << "double c = 1.234567890 ->float f=c,f="<<f<<endl;

    system("pause");
    return 0;

}   

2、赋值表达式可以嵌套使用,对一个变量赋值后该表达式的值为赋值给左边的变量的值,如int a;a=4;则表达式a=4的值为4,即你可以这样使用(a=4)+5,结果为9,也可以这样使用int c,int b;a=b=c=7;则,a,b,c都被赋予7的数值,此时运算是右结合的。

3、复合赋值运算:
形如y=x+y;这样的表达式,x+y计算的结果又被重新储存在y中,这样的运算称为复合运算,对前面的复合运算可简写为y+=x,该式表示的是y=y+x;依次类推可有:y-=x(即y=y-x),y*=x(即y=y*x)….

4、自增自减运算
对于前面的表达式y+=x;如果x=1;则还可以写为y++;这是C++中的自增运算表达式,同理还有自减运算表达式。自增或者自减也可以表达为++y;–y;这种表达与前面的区别在于表达式的结果不同,y++(y–)以当前y值作为表达式的值,然后执行加1操作,比如假定y的初始值为1,执行int d=y++,执行完成后d=1,y=2;而对于++y,则是先执行加1操作,然后再计算表达式的值,依旧假设y初值为1,执行int d=++y;则执行结束后d=2,y=2。

例子:自增自减的验证

/*
*赋值运算中,验证自增自减运算规则
*@version 20161226
**/

#include<iostream>
using namespace std;

int main(){
    int y = 1;
    int c = y++;
    cout << "int y = 1;int c = y++;c= " << c<<"   y="<<y<< endl;

    y = 1;
    c = ++y;
    cout<<"int y = 1;int c = ++y;c= " << c << "   y=" << y << endl;

    system("pause");
    return 0;

}

5、强制类型转换
C++中的算数运算只能在同种类型的数据间进行,如果要对不同类型的数据进行算数运算,就需要进行类型的强制转换,C++支持两种格式的类型转换,例如需要把int转换为double时:int a;(double)a;或者static_cast(a)。
上面的两种转换格式中,第一种表示编译器不对这个执行的表达式作任何关于类型方面的正确性检查,而第二种表示指明性质的强制转换,static_cast表示静态转换,此外还有reinterpret_cast(重解释转换)、const_cast(常量转换)、dynamic_cast(动态转换)。使用的格式同static_cast,在此不再赘述。

三、小结

本文介绍了C++中使用的运算符及其运算法则,包括算术运算符、赋值运算符,特殊的,还介绍了自增自减运算,掌握这些基础运算符及其运算法则是学会C++的基础。

原文地址:https://www.cnblogs.com/yczha/p/13160294.html