目录
- 1.算术操作符
- 2.接续符和转义符 \
- 1.续行符使用
- 2.转义
- 3.单引号和双引号
- 4.逻辑运算符
- 5.位运算符
- 6.移位操作符
- 7.++ --操作
- 8.条件操作符
- 9.逗号表达式
- 10.操作符的属性
1.算术操作符
- 算术操作符:
+ - * / %
- 除了
%
操作符以外,其他的几个操作符可以作用于整数和浮点数 - 对于
/
操作符如果两个操作数都为整数,执行整数除法,而只要有浮点数执行的就是浮点数除法- 即:如果浮点型中要计算小数,那么算式中必要要有一个小数
- 如:
sum += 1.0 / i;
%
操作符的两个操作数必须为整数,返回的是整除之后的余数
2.接续符和转义符 \
1.续行符使用
- 虽然直接换行也可以,但是
\
有自述性,告诉使用者要换行了
if(a == 1 &&\
b == 2 &&\
c == 3)
{}
2.转义
- 字面转特殊
n
->\n
- 特殊转字面
"
->\"
- 回车和换行是一个东西吗?
- 回车:
\r
光标回到当前行的最开始 - 换行:
\n
光标移动至下一行
- 回车:
转义字符 | 释义 |
---|---|
\? | 在书写连续多个问号时使用,防止它们被解析成三字母词 |
\' | 用于表示字符常量' |
\" | 用于表示一个字符串内部的双引号 |
\\ | 用于表示一个反斜杠,防止它被解释为一个转义序列符 |
\a | 警告字符,蜂鸣 |
\b | 退格符 |
\f | 进纸符 |
\n | 换行 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
\ddd | ddd表示1~3个八进制数字,如:\130 X |
\xdd | dd表示2个十六进制数字,如:\x30 0 |
3.单引号和双引号
- 单引号是字符,双引号是字符串
- C99标准规定
'a'
叫做整形字符常量,被看作int型- 存入
char c = 'a'
中,sizeof(c) = 1
是因为发生了截断
- 存入
4.逻辑运算符
-
&&
(逻辑与):同真则真 -
||
(逻辑或):至少有一个为真,结果则为真 -
短路:
&&
一个条件不满足,已经不需要再看后续的条件的情况- &&如果已经遇到了一个假,则不会执行后续语句
||
一个条件已满足,已经不需要再看后续的条件的情况- ||如果已经遇到了一个真,则不会执行后续语句
-
短路设计的一个有趣用法
flag && func(); // if 语句
flag || func(); // if else
!
(逻辑非):True为0 False为1
5.位运算符
- 注意:操作数必须是整数
&
按位与|
按位或- 任何数字和0
|
保持不变 - 任何数字和1
|
,对应比特位被设置为1
- 任何数字和0
^
按位异或- 相同为0,相异为1
- 任何数据和0异或,都是他本身
- 异或运算支持交换律和结合律
- 用异或交换两个变量的值的好处?
- 异或没有进位 --> 绝对不会发生溢出问题
~
按位取反
6.移位操作符
- 注意:移位操作符的操作数只能是整数
- 左移、右移和原反补没关系
- 只有当数据被写入或读取时,才和原反补有关系
- 负数左右移完全不可预测
<<
(左移):最高位丢弃,最低为补0>>
(右移):- 无符号数:最低位丢弃,最高位补0 -> [逻辑右移]
- 有符号数:最低位丢弃,最高位补符号位 -> [算数右移] (和内部保存什么数据无关)
- 如何理解丢弃?
<<
或者>>
都是计算,都要在CPU中进行,可是参与移动的变量,是在内存中的- 所以需要先把数据移动到CPU内寄存器中,再进行移动
- 在实际移动的过程中,是在寄存器中进行的,即大小固定的单位内
- 那么,左移右移一定会有位置跑到"外边"的情况
- 总结:
- 左移:无脑补0
- 右移:先判定是 算术右移 还是 逻辑右移
- 判定依据:看自身类型,和变量的内容无关
- 判定了算数,还是逻辑,才能决定最高位补什么
7.++ --操作
- 后置
++
/--
:先使用,再++
/--
- 前置
++
/--
:先++
/--
,后使用
8.条件操作符
-
exp1 ? exp2 : exp3
exp1
成立,exp2
执行,整个表达式的结果是:exp2的结果exp1
不成立,exp3
执行,整个表达式的结果是:exp3的结果
-
条件表达式通常用于赋值语句之中
max = a > b ? a : b;
- 例子:
b = a > 5 ? 1 : -1;
- 翻译:
a > 5
吗?如果是,将1赋值给b,如果不是,将-1赋值给b
- 翻译:
9.逗号表达式
- 逗号表达式,就是用逗号隔开的多个表达式:
exp1, exp2, exp3, ..., expN
- 从左向右依次执行
- 整个表达式的结果是最后一个表达式的结果
- 逗号运算符的优先级别在所有运算符中最低
- 例:
(3+5,6+8)
的值是14
10.操作符的属性
- 操作符的优先级
- 操作符的结合性
- 是否控制求值顺序
- 两个相邻的操作符先执行哪个?
- 取决于他们的优先级,如果两者的优先级相同,取决于他们的结合性