4.运算符和语句
4.1运算符
1.算术运算符
+运算符执行加法运算;-运算符执行减法运算;*运算符执行乘法运算;/运算符执行除法运算;%运算符执行求余运算。
2.关系运算符
关系运算符有>运算符、>=运算符、<运算符、<=运算符、==运算符、!=运算符,它们比较对象的大小,并返回bool值。如3>2,则返回1表示true。
3.赋值运算符
=为赋值运算符,它和==运算符容易混淆。赋值运算符的左侧对象必须可写,即不能是const修饰的变量。
4.递减/递增运算符
++为递增运算符,--为递减运算符。
int m = 1, n;
n = ++m; //n=2,m=2
n = m++; //n=2,m=3
当++运算符在变量的前面时,先执行自加运算,再执行赋值运算;当++运算符在变量后面时,先执行赋值运算,再执行自加运算。递减运算符同理。
注:当不修改变量的数值时,尽量使用前缀版本的递减/递增运算符。因为前缀版本的执行速度比后缀版本的快,所以在for循环中可以使用++i的语句。
double pb = 10;
double * pt = &pb;
cout << ++*pt << endl; //打印11
cout << ++(*pt) << endl;//打印12
对于指针前缀版本的递减运算符, ++*pt和++(*pt)是一样的,都是将*pt的数值加一。递减运算符同理。
double pb = 10;
double * pt = &pb;
cout << (*pt)++ << endl; //打印10
cout << *pt << endl; //打印11
cout << *pt++ << endl; //打印11
cout << *pt << endl; //打印-1.21173e+235
指针后缀版本的递减运算符,(*pt)++ 是先打印出*pt的数值,再加1; *pt++ 是先打印出*pt的数值,再对pt加1,所以后面的*pt打印的是下一个地址的内容,因此数据是乱的。
总结:指针的递减/递增操作,只有*pt++是地址加1,其他都是所指向的变量加1。
5.逻辑运算符
逻辑与运算符&&是当两个对象都为真时,结果为真;否则假。逻辑或运算符||当两个对象中有一个真,结果为真;两个都为假,结果为假。逻辑非运算符!是当对象为真,结果为假;对象为假,结果为真。
if (0x06 && 0x08)
cout << "逻辑与运算符" << endl; //打印逻辑与运算符
0x06 && 0x08运算结果是1,因为对于逻辑与来说0x06和0x08都是1。
6.位运算符
位运算符的对象只能是整数类型,并将整数换算成二进制数据来操作。
<<运算符是左移,>>运算符是右移;&运算符是位与,|运算符是位或,~运算符是位取反,^运算符是位异或。
if (0x06 & 0x08)
cout << "逻辑与运算符" << endl;
else
cout << "位与运算符" << endl;//打印位与运算符
在前面介绍了逻辑运算符,它和位运算符很相似。0x06和0x08逻辑与则结果是1;若是位与,0x06 & 0x08换成二进制是0110位与1000,结果是0000。位运算就是将整数转换成二进制,然后一位一位的操作。
7.成员访问运算符
在C++中有结构体、类,它内部定义了很多成员&#x