自学内容网 自学内容网

C++要点总结_02_表达式与语句

2 表达式与语句

  1. 运算符就是具有运算功能的符号。
  2. “::” :作用域运算符。
  3. ->:成员指针运算符。
  4. 运算符种类:算术运算符、关系运算符、逻辑运算符、赋值运算符、位运算符、移位运算符、sizeof运算符、条件运算符和逗号运算符。

2.1 算术运算符

  1. 算术运算符:的加(+)、减(-)、乘(*)、除(/)、模运算(%)、自增(++)、自减(–)。
// 算术运算符实例
#include <iostream>
#include <type_traits>
#include <cmath>
using namespace std;

int main(int argc, const char * argv[]) {
    int a=1,b=2;
    cout <<"a+b= "<< a+b <<endl;     // 1+2
    cout <<"a+100= "<< a+100 <<endl; // 1+100
    
    cout <<"a-b= "<< a-b <<endl;     // 1-2
    cout <<"a-100="<< a-100 <<endl;  // 1-100
    
    cout <<"a*b="<< a*b <<endl;     // 1*2
    cout <<"a*100="<< a*100 <<endl; // 1*100
    
    cout <<"a/b="<< a/b <<endl;     // 1/2
    cout <<"a/100="<< a/100 <<endl; // 1/100
    
    cout <<"a%b="<< a%b <<endl;     // 1%2
    cout <<"a%100="<< a%100 <<endl; // 1%100
    
    cout <<"a++:"<< a++ <<endl;     // 先赋值,输出1,a再自增,a+=1;a=2
    cout <<"a--:"<< a-- <<endl;     // 先赋值,输出2, a再自减,a-=1;a=1
    
    cout <<"++a:"<< ++a <<endl;     // a自增,a+=1;a=2,再输出2
    cout <<"--a:"<< --a <<endl;     // a自减,a-=1;a=1,再输出1
    
    return 0;
}
/* 运行结果:
a+b= 3
a+100= 101
a-b= -1
a-100=-99
a*b=2
a*100=100
a/b=0
a/100=0
a%b=1
a%100=1
a++:1
a--:2
++a:2
--a:1
Program ended with exit code: 0
*/

  1. 关系运算符:比较两个对象的大小,结果为true或false。
  2. 关系运算符种类:< ,> ,<= ,>= ,, !=。关系运算符
    的优先级低于算术运算符,高于赋值运算符。<,<=,>,>=的优先级相同,高于
    和!=,==和!=的优先级相同。
// 算术运算符实例
#include <iostream>
#include <type_traits>
#include <cmath>
using namespace std;

int main(int argc, const char * argv[]) {
    int a=1,b=200,c=0;
    printf("a>b: %d\n",a>b);   // 0 false
    printf("a>=b: %d\n",a>=b); 
    printf("a<b: %d\n",a<b);   // 1 true
    printf("a<=b: %d\n",a<=b);
    printf("a==b: %d\n",a==b);
    printf("a+1==c: %d\n",a+1==c);
    printf("a!=b: %d\n",a!=b);
    return 0;
}

/* 运行结果
a>b: 0
a>=b: 0
a<b: 1
a<=b: 1
a==b: 0
a+1==c: 0
a!=b: 1
Program ended with exit code: 0

*/

  1. 逻辑运算符:对真和假这两种逻辑值进行运算,运算后的结果仍是一个逻辑值。
  2. &&:逻辑与。当两个对象都为真时,结果为真;有一个对象为假或两个对象都为假时,结果为假。
  3. ||: 逻辑或。当两个对象都为假时,结果为假;有一个对象为真或两个对象都为真时,结果为真。
  4. ! : 逻辑非。当对象为真时,运算结果为假;当对象为假时,运算结果为真。
#include <iostream>
#include <type_traits>
#include <cmath>
using namespace std;

int main(int argc, const char * argv[]) {
    int a =1, b=2,c=3;
    // && 逻辑与运算,两个表达式均为真,结果才为真。
    printf("(a>b && a> c): %d \n",a>b && a> c);
    printf("(a>b && a< c):  %d \n",a>b && a< c);
    printf("(a<b && a<c): %d \n",a<b && a<c);
    // ||  逻辑或运算,两个表达式均为真,结果才为真。
    printf("(a>b): %d \n",a>b || a> c);
    printf("(a>b || a< c):  %d \n",a>b || a< c);
    printf("(a<b || a<c): %d \n",a<b || a<c);
    // 逻辑非运算,表达式为真,去非之后,结果为假,反之为真。
    printf("!(a>b): %d \n",!(a>b));
    printf("!(a<b): %d \n",!(a<b));
    
    return 0;
}
/* 运行结果
(a>b && a> c): 0 
(a>b && a< c):  0 
(a<b && a<c): 1 
(a>b): 0 
(a>b || a< c):  1 
(a<b || a<c): 1 
!(a>b): 1 
!(a<b): 0 
Program ended with exit code: 0 
*/
  1. 赋值运算符:赋值运算符分为简单赋值运算符和复合赋值运算符,复合赋值运
    算符又称为带有运算的赋值运算符,简单赋值运算符就是给变量赋值的运算符。
  2. 复合赋值运算符:是等同的简单赋值运算符和其他运算的组合。
  3. 复合赋值运算符: +=、-=、*=、/=、%=、<<=、>>=、&= 、!=、^=。
#include <iostream>
#include <type_traits>
#include <cmath>
using namespace std;

int main(int argc, const char * argv[]) {
    int a =1, b=2,c=3;
    //  +=、-=、*=、/=、%=、<<=、>>=、&= 、!=、^=
    printf("a+=b: %d \n",a+=b);  // a = a+b = 1+2 =3
    printf("a-=b:  %d \n",a-=b); // a = a-b = 3-2 =1
    printf("a*=b: %d \n",a*=b);  // a = a*b = 1*2 =2
  
    printf("a/=b: %d \n",a/=b);  // a = a/b = 2*2 =1
    printf("a%=b:  %d \n",a%=b); // a = a%b = 1%2 =1
    printf("a<<=c: %d \n",a<<=c);// a = a*2*2*2 = 8
    printf("a>>=c: %d \n",a>>=c);// a = a/2/2/2 = 1

    printf("a&=c: %d \n",a&=c);  // a=a&c= 01(二进制)  & 11 (二进制) = 01(二进制) = 1(十进制)
    printf("a|=c: %d \n",a|=c);  // a=a|c= 01(二进制)  | 11 (二进制) = 11(二进制) = 3(十进制)
    printf("a^=c: %d \n",a^=c);  // a=a^c= 11(二进制)  | 11 (二进制) = 00(二进制) = 0(十进制)
    
    return 0;
}

/*
 a+=b: 3
 a-=b:  1
 a*=b: 2
 a/=b: 1
 a=b:  1
 a<<=c: 8
 a>>=c: 1
 a&=c: 1
 a|=c: 3
 a^=c: 0
 Program ended with exit code: 0
 
 */
  1. 位运算符:有&(位逻辑与)、|(位逻辑或)、^(位逻辑异或)和~(取反运算符)。
  2. 位运算优先级:在双目运算符中,位逻辑与优先级:最高,位逻辑或次之,位逻辑异或最低。取反运算符为单目运算符。
    13.位逻辑与:是将操作数转换成二进制表示方式,然后将两个二进制操作数对象从低位(最右边)到高位对齐,每位求与,若两个操作数对象同一位都为1,则结果对应位为1,否则结果中对应位为0。
    14.位逻辑或:是将操作数转换成二进制表示方式,然后将两个二进制操作数对象从低位(最右边)到高位对齐,每位求或,若两个操作数对象同一位都为0,则结果对应位为0,否则结果中对应位为1。
    15.位逻辑异或:将操作数转换成二进制表示方式,然后将两个二进制操作数对象从低位(最右边)到高位对齐,每位求异或,若两个操作数对象同一位不同时为1,则结果对应位为1,否则结果中对应位为0。
    16.取反运算符:将操作数转换成二进制表示方式,然后将各位二进制位由1变为0,由0变为1。

#include <iostream>
#include <type_traits>
#include <cmath>
using namespace std;

int main(int argc, const char * argv[]) {
    int a =1, b=2;
  
    printf("a&b: %d \n",a&b);  // 1&2 = (二进制) 01&10 =00(二进制) = 0  (十进制)
    printf("a|b: %d \n",a|b);  // 1|2 = (二进制)01|10 =11(二进制) = 3   (十进制)
    printf("a^b: %d \n",a^b);  // 1^2 = (二进制)01^10 =11 (二进制)= 3    (十进制)
    printf("~a: %d \n",~a);   // ~1 = (二进制)~00000001=10000010 (二进制)= -2  (十进制)
    
    return 0;
}
/*
 a&b: 0
 a|b: 3
 a^b: 3
 ~a: -2
 Program ended with exit code: 0
 */
  1. 移位运算符:<<(左移)和>>(右移),
  2. 左移: 将一个二进制操作数对象按指定的移动位数向左移,左边(高位端)溢出的位被丢弃,右边(低位端)的空位用0补充。左移相当于乘以2的幂。
  3. 右移:将一个二进制的数按指定的位数向右移动,右边(低位端)溢出的位被丢弃,左边(高位端)的空位或者一律用0填充,或者用被移位操作数的符号位填充,运算结果和编译器有关,在使用补码的机器中,正数的符号位为0,负数的符号为1。
  4. sizeof运算符:sizeof(数据类型)、sizeof(表达式)。是唯一一个用到字母
    的运算符。sizeof(int);int a[10];sizeof(a);
#include <iostream>
#include <type_traits>
#include <cmath>
using namespace std;

int main(int argc, const char * argv[]) {
    int a[10];
  
    cout<<sizeof(int)<<endl;
    cout<<sizeof(a)<<endl;
    return 0;
}
/*  运行结果
 4
 40
 Program ended with exit code: 0
 */
  1. 条件运算符:C++中仅有的一个三目运算符,该运算符需要3个运算数对象,形式如下:<表达式1>?<表达式2><表达式3>。表达式1是一个逻辑值,可以为真或假。若表达式1为真,则运算结果是表达式2,如果表达式1为假,则运算结果是表达式3。这个运算相当于一个if语句。

#include <iostream>
#include <type_traits>
#include <cmath>
using namespace std;

int main(int argc, const char * argv[]) {
    int a=1,b=2;
    a>b?cout<<"a>b"<<endl:cout<<"a<=b"<<endl;
    return 0;
}
/*  运行结果
a<=b
 */
  1. 逗号运算符:。逗号运算符的优先级别最低,结合方向自左至右,其功能是把两个表达式连接起来组成一个表达式。逗号运算符是一个多目运算符,并且操作数
    的个数不限定,可以将任意多个表达式组成一个表达式。整个逗号表达式的值和类型由最后一个表达式决定。

2.2 结合性与优先级

  1. 运算符优先级决定了在表达式中各个运算符执行的先后顺序。高优先级运算符要先于低优先级运算符进行运算。
  2. 当表达式中出现了括号时,会改变优先级。先计算括号中的子表达式值,再计算整个表达式的值。

2.3 表达式

1.表达式:由运算符、括号、数值对象或变量等几个元素构成。一个数值对象是最简单的表达式,一个表达式可以看成一个数学函数,带有运算符的表达式通过计算将返回一个数值。
2. 表达式类型:算术表达式、关系表达式、条件表达式、赋值表达式、逻辑表达式和逗号表达式。
3. 表达式中的类型转换:隐式转换,强制类型转换。
4. 隐式转换:a.若参与运算量的类型不同,则先转换成同一类型,然后进行运算。赋值时会把赋值类型和被赋值类型转换成同一类型,一般赋值号右边量的类型将转换为左边量的类型。如果右边量的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度,丢失的部分按四舍五入向前舍入。b.int型和long型运算时,先把int量转成long型后再进行运算。所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再进行运算。char型和short型参与运算时,必须先转换成int型。
5. 强制类型转换:生在不同数据类型的量混合运算时,由编译系统自动转换数据类型。

#include <iostream>
#include <type_traits>
#include <cmath>
using namespace std;

int main(int argc, const char * argv[]) {
    int a;
    short c = 1;
    char d = 65;
    float x =3.14;
    double y = x;
    a = -x;
    unsigned long aa = 100;
    cout<<"a:"<<a<<endl;
    cout<<"sizeof(d+c):"<<sizeof(d+c)<<endl;  // char 和short相加,现转换成int类型。
    cout<<"sizeof(y):"<<sizeof(y)<<endl;
    cout<<"sizeof(x+y):"<<sizeof(x+y)<<endl;
    cout<<"sizeof(a+aa):"<<sizeof(a+aa)<<endl;
    a = -10;
    cout<<"(a+aa):"<<(a+aa)<<endl;
    cout<<"int(x):"<<int(x)<<endl;
    return 0;
}


/* 运行结果
a:-3
sizeof(d+c):4
sizeof(y):8
sizeof(x+y):8
sizeof(a+aa):8
(a+aa):90
int(x):3
Program ended with exit code: 0
 */

2.4 语句

  1. 语句:语句是最小的可执行单元,一条语句由一个分号结束。
  2. 左值:内存当中持续储存的数据。
  3. 右值:临时储存的结果。
#include <iostream>
#include <type_traits>
#include <cmath>
using namespace std;

int main(int argc, const char * argv[]) {
    int a=10;
//
//    cout<<"a+=a*=a/=a-6:"<<a+=a*=a/=(a-6)<<endl;
    int b =a+=a*=a/=a-6;
    cout<<"b:"<<b<<endl;
    int d=2,c;
    c = a+d;
    d = a;
    a = c-d;
    cout<<"a:"<<a<<endl;
    cout<<"d:"<<d<<endl;
    return 0;
}


/* 运行结果
b:8
a:2
d:8
Program ended with exit code: 0
 */

参考《C++从入门到精通》


原文地址:https://blog.csdn.net/qq_35732321/article/details/140672270

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!