C++运算符

算术运算符

+

作用: 将两个数相加
比如说: 3+5; 的值为8。

float a = 3.1 + 1;  //值为4.1
-

作用:左边的数减去右边的数.
比如: 3-5; 的值为-2。

*

作用:将两个数相乘。

3*5;	//值为15
float a=3.1*2;	//a的值为6.2
/

作用:左操作数除以右操作数

10/2;	//值为5
5/2//注意:这里值为2。整数整除结果依然为整数!
5.0/2//注意:这里值为2.5。只要其中一个操作数为float或double,那么结果就为float或double。
float a=5.0/2;	//a的值为2.5
%

作用:得到整除后的余数。

10%3;   //结果为1
++

作用:实现加一操作。
分类:前自增和后自增。
前自增:先加一后运算。
后自增:先运算后加一。运算前把a++看作整体,进行运算,运算完后再进行加一操作。

int a = 0;
int b = a++;	
cout << "b = " << b << endl;    //值为0
cout << "a = " << a << endl;    //值为1

作用:实现减一操作。
分类:前自减和后自减。
前自减:先减一后运算
后自减:先运算后减一。

int a = 1;
int b = a--;
cout << "b = " << b << endl;    //值为1
cout << "a = " << a << endl;    //值为0

【插入知识点】:bool类型

这是一种数据类型,只有两个值:true和false,即真和假。
注意:在C++中,用1来表示真,用0来表示假。
运算过程中:0表示假,非0表示真。

cout << true << endl;   //输出1。

关系运算符

==

作用:判断两边的操作数是否相等,相等则返回true,不相等则返回false;

int a = 1, b = 3;
bool c = (a == b);
cout << "c = " << c << endl;    //c的值为0
!=

判断两边的操作数是否不相等。如果不相等,则为真。否则为假。

int a = 1, b = 3;
bool c = (a != b);
cout << "c = " << c << endl;    //输出结果为1
>、<、>=、<=

> : 判断左边是否大于右边
< : 判断左边是否小于右边
>= : 判断左边是否大于等于右边
<= : 判断左边是否小于等于右边

逻辑运算符

逻辑与&

语法:左表达式 & 右表达式。
注意:左右表达式都为bool类型,结果也是bool类型。

真值表:

左表达式右表达式结果
truetruetrue
falsetruefalse
truefalsefalse
falsefalsefalse

逻辑或|

语法:左表达式 | 右表达式。
注意:左右表达式都为bool类型,结果也是bool类型。
假 | 假 -->结果为假,否则为真。
即左值和右值中只要有一个为真,结果就为真。

真值表:

左表达式右表达式结果
truetruetrue
falsetruetrue
truefalsetrue
falsefalsefalse
短路与&&

他的真值表和逻辑与&是一样的,但是它们的运算过程不一样。
逻辑与&:先计算左边的值,再计算右边的值,最后根据真值表得出结果。
短路与&&:先计算左边的值,如果左边的值为false,那么右边的值就没有必要计算了,结果直接为false。

int a = 0, b = 5;
(a = 0) && (b = 1);
cout << b << endl;  //输出的结果为5。因为语句(b = 1)根本没有参与运算。
短路或||

他的真值表和逻辑与|是一样的,但是它们的运算过程不一样。
逻辑或|:先计算左边的值,再计算右边的值,最后根据真值表得出结果。
短路或||:先计算左边的值,如果左边的值为true,那么右边的值就没有必要计算了,结果直接为true。

int a = 0, b = 5;
(a = 1) || (b = 1);
cout << b << endl;  //输出的结果为5。因为语句(b = 1)根本没有参与运算。
逻辑非

作用:取反。原本为真,取反后为假;原本为假,取反后为真。

cout << !true << endl;      //输出0

赋值运算符

=

作用:将右边的值赋值到左边的变量里。
左边的变量相当于一个桶,可以装东西。即可以装这个值。

举例:
int a =1;
int b=a;

上面代码的意思是:将1装如a桶,再将a桶的值赋值给b桶。

+=

举例

int a =0;
a += 2;		//相当于a=a+2

其他的赋值运算符,像-=、*=、/=、%=都是类似的。

【插入知识点】:进制

常用的进制有二进制、八进制、十进制和十六进制
二进制的意思是:满二进一,十进制是满十进一,所以二进制是由0和1组成
十六进制:用A、B、C、D、E和F来表示10到15(满16进1)
八进制在前面加0表示,十六进制加0x。
BIN、OCT、DEC、HEX分别是2进制、8进制、10进制、十六进制的英文缩写

二进制转化为十进制:

我们把二进制的1001转化为十进制,首先对1001进行编号,最低位为0。
比如1001的编号:3 2 1 0分别对应1 0 0 1。
1001(2)=1×23+0×22+0×21+1×20=9(10)
原本是几进制,就乘以几的次方。

十进制转化为二进制

举例:
将十进制的9转化为二进制:

用9一直除以2,直到不能再除为止。
除的过程中得到余数。
最后将所有余数倒过来,就是答案。

ASC Ⅱ

计算机中是没有办法保存A这个字符的,因为计算机只认识0和1。
那么ASC Ⅱ是一种保存字符的规范。A的ASC-Ⅱ码是65,也就是计算机中保存的0100 0001。
需要记下来的几个ASC-Ⅱ码:A为65,a为97,0为48。

存储单位
1 Byte = 8 bit     1 B =8 b
1 KB = 1024 Byte
1 MB = 1024 KB
1 GB = 1024 MB
1 TB = 1024 GB
1 PB = 1024 TB

位运算符

位运算符是0和1之间的逻辑运算。
在这之前必须懂得进制之间的转化,什么是二进制,以及变量值在内存中是怎么存储的。
还必须懂得存储单位之间的关系,特别是1 Byte = 8 bit。

&:按位与。和逻辑与的真值表一样,只不过按位与是0和1的计算,不是true和false。
| :按位或。和逻辑或的真值表一样,只不过按位与是0和1的计算,不是true和false。
^ : 按位异或。即相同为0,不同为1。比如说0^1=1。
~:取反。即0变成1,1变成0。

移位运算符:<<和>>(左移和右移)

假设如果 A = 60,用二进制格式表示,如下所示:
A = 0011 1100
---------------------------------------------
A << 2 将得到 240,即为 1111 0000
A >> 2 将得到 15,即为 0000 1111


原码,反码和补码

问题引出:负数在内存中怎么表示?
计算机中的有符号数有三种表达方式:原码,反码和补码.
这三种表示方法都由符号位和数值位表示.
第一位用作符号位,其他位用于数值位。
这三种表示方法都是用0表示正,用1表示负。也就是说,如果数为正,则第一位为0,否则为1。

原码

符号位:用0表示正,1表示负。(同)
数值位:将数值的绝对值转化为2进制。
比如,2的原码是0000 0010,-2的原码是1000 0010。

反码

符号位:用0表示正,1表示负。(同)
数值位:正数的数值位:将数值的绝对值转化为2进制(同)。负数的数值位:将数值的绝对值转化为2进制,再取反。

补码(重点)

符号位:用0表示正,1表示负。(同)
数值位:正数的数值位:将数值的绝对值转化为2进制(同)。负数的数值位:将数值的绝对值转化为2进制,再取反,加1。
比如,19的补码是0001 0011。-19的补码是1110 1101。
口诀:正数不变,负数取反加一。

总结

他们都是使用0表示正,用1表示负。
它们的正数表示都是一样的。不同表现在负数。
表示负数时:原码只将数值的绝对值转化为2进制;反码在原码的基础上取反;补码在反码的基础上加1。
注意:计算机中数值是用补码的方式表示的!!!!


其他运算符

逗号运算符
int a = (1, 2, 3, 4, 5);	//a的值为5。即逗号表达式最后一项的值。
sizeof

作用: 返回变量或者数据类型的存储大小

int a = 1;
sizeof(a)//将返回4,因为整型变量大小为4字节。
?:

这是C++里唯一的三目运算符.
单目: 连接一个值的运算符叫单目运算符。如正号+和负号-。
双目:连接两个值的运算符叫双目运算符。如加号+和减号-。
三目:连接三个值。
语法:表达式?X:Y。表达式的值为true时,整个三目运算符的值为X,否则为Y。

int a = 1>3 ? 5:10;		//1>3的结果为假,所以a赋值为10。
强制转换

举例-将小数转换为整数。

float a = 1.3;
int b=int(a);	//将a强制转换为float类型,b的值为1(去除小数部分)

高类型与低类型

常见数据类型由低到高:char/short -> int -> long -> float -> double
低类型–>高类型:不会丢失精度,因此无需强制转换。反之则需要强制转换。

优先级和结合性

结合性:

运算符与谁结合,怎么结合。
比如:&&是与左右两边的表达式结合,并且从左到右结合。
再比如:int a = 1±1;     //负号是和右边的数结合,而不是和加号结合。

优先级:

什么是优先级:多个运算符相遇时,先计算哪一个运算符。
比如:int a = 1+2*3;     //这个表达式是先算*再算+。

优先级与结合性表:


posted @ 2019-08-09 10:24  NetRookieX  阅读(2)  评论(0编辑  收藏  举报