运算符
算术运算符—7个
+(加)、-(减)、*(乘)、/(除)、%(取余/模)、++(自加)、--(自减)
- 注意:
* / 的优先级 高于 + -,使用()
% 不能对浮点数进行,/ 得到的结果是整数
两个整数整除得到的是整数,有浮点数据,得到浮点数
- ++:
++在前:先自加,后赋值
++在后:先赋值,后自加
- –:
–在前:先自减,后赋值
–在后:先赋值,后自减
如果 ++、-- 单独成一行,在前和在后没有区别
关系运算符—6个
\>(大于)、>=(大于等于)、<(小于)、<=(小于等于)、==(等于)、!= (不等于)
关系运算符通常用作表达式结果比较,比较的结果是逻辑结果,只有成立和不成立,真和假,false 和 true (零和非零)。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sK1npYMf-1624361664464)(C:/Users/%E7%A8%8B%E5%B2%9B%E4%B8%BB/AppData/Local/Temp/msohtmlclip1/01/clip_image002.gif)]
逻辑运算符
&&(逻辑与)、||(逻辑或)、!(逻辑非)
逻辑运算符用作连接符号两边的关系式,判断两边关系式的共同结果,结果是逻辑值,只有成立和不成立,真和假,false和 true (零和非零)。
- &&(逻辑与):
1 && 1 :1
1 && 0 :0
0 && 1 :0
0 && 0 :0
使用&&连接左右两边表达式,只要有一个表达式的逻辑结果是假的,整个表达式就不成立。只有两边的表达式都为真,整个表达式才成立
- ||(逻辑或):
1 || 1 :1
1 || 0 :1
0 || 1 :1
0 || 0 :0
使用||连接左右两边表达式,只要有一个表达式的逻辑结果是真的,整个表达式就成立。只有两边的表达式都为假,整个表达式才不成立
- !(逻辑非):
!1 :0
!0 :1
条件表达式不成立取 ! 会变为成立;条件表达式成立取 ! 会变为不成立。
位运算符—6个
&(按位与)、|(按位或)、^(按位异或)、~(按位取反)、<<(左移)、>>(右移)
位运算符只要是对二进制位操作的。
操作有符号负数,是操作补码形式!!!
- &(按位与):
11010101
& 10011001
10010001
两个数进行按位与操作,是将两个数的二进制依次相与,只有两个二进制位都是1,结果才为1,只要有一个是0,结果就为0。(与0得0)
char a = 13, b = 7;
a & b = 5
0000 1101
& 0000 0111
0000 0101
char a = -13, b = -7;
a & b = -15;
1111 0011 -13补码
& 1111 1001 -7补码
1111 0001 – 某个数的补码
1000 1111 -15
- |(按位或):
11010101
| 10011001
11011101
两个数进行按位或操作,是将两个数的二进制依次相或,只要两个二进制位有一个是1,结果就为1(或1得1),只有两个都是0,结果才为0。
char a = 13, b = 7;
a | b = 15
0000 1101
& 0000 0111
0000 1111
char a = -13, b = -7;
a | b = -5
1111 0011 -13补码
& 1111 1001 -7补码
1111 1011 —某个数的补码
1000 0101 -5
- ^(按位异或):
11010101
^ 10011001
01001100
两个数进行按位异或操作,是将两个数的二进制依次相异或,只要两个二进制位相同,结果就为0,两个二进制不同,结果就为1。(相同为0,不同为1)
char a = 110, b = 33;
a ^ b = 79
0110 1110
^ 0010 0001
0100 1111
char a = -110, b = -33;
a ^ b = 77
1001 0010 – -110补码
^ 1101 1111 – -33补码
0100 1101 77
- ~(按位取反):
~ 10101101
01010010
- 对一个数进行按位取反,是对该数的每个二进制位依次取反,1变0,0变1.
char a = 45;
a = ~a;
~ 0010 1101
1101 0010 — 某个数的补码
1010 1110 -46
<<(左移):
0000 0111 << 3
00111000
左移是将一个数的二进制位整体向左边移动,左边溢出的部分舍弃,右边空缺的部分补0。
>>(右移):
0000 0111 >> 4
0000 0000
左移是将一个数的二进制位整体向右边移动,右边溢出的部分舍弃
-
对于无符号数据:左边高位补0
-
对于有符号数据:
- 正数:左边高位补0
- 负数:左边高位补1 数据移动之前就是负数
赋值复合运算符—10个
=(赋值运算符) a = 3 将右边的值或者表达式结果赋值给左边的操作数
+= a += b <==>a = a+b
将右边的值或者表达式与左边的操作数相加,结果重新赋值给左边的操作数
-= a -= b <==>a = a-b
将右边的值或者表达式与左边的操作数相减(左边操作数减右边),结果重新赋值给左边的操作数
*= a = b <==>a = ab
将右边的值或者表达式与左边的操作数相乘,结果重新赋值给左边的操作数
/= a /= b <==>a = a/b
将右边的值或者表达式与左边的操作数相除(左边操作数除右边),结果重新赋值给左边的操作数
%= a %= b <==>a = a%b
将右边的值或者表达式与左边的操作数相取余(左边操作数%右边),结果重新赋值给左边的操作数
&= a &= b <==>a = a&b
将右边的值或者表达式与左边的操作数按位与,结果重新赋值给左边的操作数
|= a |= b <==>a = a|b
将右边的值或者表达式与左边的操作数按位或,结果重新赋值给左边的操作数
^= a ^= b <==>a = a^b
将右边的值或者表达式与左边的操作数按位异或,结果重新赋值给左边的操作数
<<= a <<= n <==>a = a << n
将左边操作数左移n位,将结果重新赋值给左边操作数
>>= a >>= n <==>a = a >> n
将左边操作数右移n位,将结果重新赋值给左边操作数
特殊运算符
sizeof:求取数据类型或变量所占内存空间的大小,单位是字节
三目运算符:
格式: ? :
表达式 ? 表达式成立执行的内容 : 表达式不成立执行的内容
执行流程:首先判断表达式的逻辑结果,如果是成立的直接执行 表达式成立执行的内容 ,然后把结果作为整个三目运算符的结果,结束运行;如果是不成立,就执行 表达式不成立执行的内容, 然后把结果作为整个三目运算符的结果,结束运行。
三目运算符支持嵌套使用
表达式 ? (表达式 ? 表达式成立执行的内容 : 表达式不成立执行的内容) : (表达式 ? 表达式成立执行的内容 : 表达式不成立执行的内容)
标准格式化输入函数----scanf
scanf(“格式化内容”, 地址1, 地址2, …, 地址n );
&变量名 获得变量的地址
练习:从终端输入三个数,使用三目运算符比较三个数的大小,找出最大的数。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p6tQmoVY-1624361664466)(C:/Users/%E7%A8%8B%E5%B2%9B%E4%B8%BB/AppData/Local/Temp/msohtmlclip1/01/clip_image004.gif)]
& 取地址运算符
获得变量的地址
逗号运算符
格式: ,
表达式1, 表达式2, 表达式3, … , 表达式n;
逗号运算符是在表达式中决定最后的内容。
有逗号运算符的表达式是从左往右依次结合的,会依次执行每一个表达式,并且把最后一个表达式的结果作为整个表达式的结果。
指针运算符
*****
格式: *变量名
运算符优先级
https://baike.baidu.com/item/%E8%BF%90%E7%AE%97%E7%AC%A6%E4%BC%98%E5%85%88%E7%BA%A7/4752611?fr=aladdin#3https://baike.baidu.com/item/运算符优先级/4752611?fr=aladdin#3
控制语句
顺序、选择、循环
选择
if、switch
if语句
- 表选择
if (条件表达式)
{
成立执行的内容;
}
- 遇到if语句,判断条件表达式,成立执行内容,不成立执行if语句下边的内容
- 二分枝选择
if (条件表达式)
{
成立执行的内容;
}
else {
不成立执行的内容;
}
- 遇到if语句,判断条件表达式,成立执行if语句的内容,不成立执行else语句的内容
- 多分枝选择
if (条件表达式1)
{
表达式1成立执行的内容;
}
else if (条件表达式2)
{
表达式2成立执行的内容;
}
else if (条件表达式3)
{
表达式3成立执行的内容;
}
…
else if (条件表达式n)
{
表达式n成立执行的内容;
}
else {
上边所有条件都不成立执行的内容;
}
首先判断条件表达式1是否成立,如果成立执行对应的内容,执行完结束整个if语句执行;如果条件不成立,会跳到下一个表达式判断,重复步骤,直到条件成立或者是遇到了else语句或者是if语句结束
switch case多分枝选择
switch (整型/字符型表达式)
{
case 常量1:
匹配成功执行的内容
break;
case 常量2:
匹配成功执行的内容
break;
case 常量3:
匹配成功执行的内容
break;
…
case 常量n:
匹配成功执行的内容
break;
default:
上边匹配都不成功执行的内容
}
-
整型/字符型表达式:需要数值型数据,必须是整型数据
-
执行流程:switch的整型/字符型表达式依次取匹配case的常量(常量表达式),匹配成功就执行语句内容,然后通过break结束整个switch语句的执行,如果匹配不成功,会跳到下一个case继续匹配,一直到default语句或者是switch语句的结束
-
break:用作结束(跳出)switch语句的执行。匹配到一个case时,语句块内省略掉break时,会不匹配下边所有的case语句,直接执行里边的内容,直到遇到下一个break或是switch语句的结束。
switch语句嵌套使用
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L2o3U2tU-1624361664467)(C:/Users/%E7%A8%8B%E5%B2%9B%E4%B8%BB/AppData/Local/Temp/msohtmlclip1/01/clip_image006.gif)]
break;
…
case 常量n:
匹配成功执行的内容
break;
default:
上边匹配都不成功执行的内容
}
- 整型/字符型表达式:需要数值型数据,必须是整型数据
- 执行流程:switch的整型/字符型表达式依次取匹配case的常量(常量表达式),匹配成功就执行语句内容,然后通过break结束整个switch语句的执行,如果匹配不成功,会跳到下一个case继续匹配,一直到**default**语句或者是switch语句的结束
- break:用作结束(跳出)switch语句的执行。匹配到一个case时,语句块内省略掉break时,会不匹配下边所有的case语句,直接执行里边的内容,直到遇到下一个break或是switch语句的结束。
switch语句嵌套使用
[外链图片转存中...(img-L2o3U2tU-1624361664467)]