一、运算符
Ⅰ算数运算符
1.加法运算符:+
加法运算符用于加法运算,使其两侧的值相加。运算对象可以是变量或常量。
例:
printf(“%d”,4+20);
打印的是24,而不是20+4。
income = salary + bribes;
计算机会查看加法运算符左右侧的变量,把它们相加,然后赋给变量income。
2.减法运算符:-
减法运算符用于减法运算,使其左侧的数减去右侧的数。
例:
takehome = 224.00 - 24.00;
结果是将200.00赋给takehome。
3.乘法运算符:*
乘法运算符用于乘法运算,原理与加法运算符、减法运算符相同。
4.除法运算符:/
C使用符号/来表示除法。/左侧的值是被除数,右侧的值是除数。
整数除法和浮点数除法不同:
#include <stdio.h>
int main()
{
printf("%d\n",5 / 4);
printf("%d\n",6 / 3);
printf("%1.2f\n",7. / 4.);
printf("%1.2f\n",7. / 4);
return 0;
}
结果
1
2
1.75
1.75
整数除法的结果是整数,浮点数除法的结果是浮点数。
5除以3实际结果有小数部分,在C语言中,整数除法结果的小数部分被丢弃,这一过程被称为截断。
浮点数除以整数,编译器会把两个运算对象转换成相同的类型,在本例中,整数被转换成浮点数。 根据“趋零截断”,3.8处理后为3,-3.8处理后为-3。
5.求模运算符:%
求模运算符用于整数运算,给出左侧整数除以右侧整数的余数。
例:
11 % 5 得 2
11 % -2 得 1
-11 % -5 得 -1
-11 % 5 得 -1
如果第1个运算对象是负数,那么求模的结果为负数;如果第1个运算对象是正数,那么求模的结果也是正数。
注:求模运算符只能用于整数,不能用于浮点数。
6.符号运算符:+和-
例:
rocky = -12;
dozen = +12;
用于表明或改变一个值的代数符号。
以这种方式使用的符号被称为一元运算符。一元运算符只需要一个运算对象。
7.递增运算符:++
(1)作用:将其运算对象递增1。
(2)以两种方式出现:①前缀模式:++出现在其作用变量的前面。先自加1,再参与运算
②后缀模式:++出现在其作用变量的后面。先参与运算,再自加1
(3)好处:使得程序更加简洁
例:
include <stdio.h>
int main()
{
int a = 1;
int b;
b = ++a;
printf("a = %d , b =%d\n", a , b );
b = a++;
printf("a = %d , b =%d\n", a , b );
return 0;
}
结果
a = 2 , b = 2
a = 3 , b = 2
8.递减运算符:–
同理递增运算符++
Ⅱ赋值运算符
1.赋值运算符:=
在C语言中, = 并不意味着“相等”,而是一个赋值运算符。
例:
bmw = 2002;
把值2002赋给变量bmw。
上面语句不读作 “ bmw等于2002 ”,而读作“ 把值2002赋给变量bmw ”。
赋值行为从右往左进行。
2.几个术语
(1)数据对象:用于储存值的数据存储区域统称为数据对象。
(2)左值:①它指定一个对象,所以引用内存中的地址
②它可用在赋值运算符的左侧
③可修改的左值:用于标识可修改的对象
(3)右值:指的是能赋值给可修改左值的量,且本身不是左值。
3.其他赋值运算符:+=、-=、*=、/=、%=
作用:更新变量
用法:左侧是一个变量名,右侧是一个表达式。
左侧与右侧代码效果相同
scores += 20 | scores = scores + 20 |
---|---|
dimes -= 2 | dimes = dimes - 2 |
bennies *= 2 | bennies = bennies * 2 |
time /= 2.73 | time = time / 2.73 |
reduce &= 3 | reduce = reduce & 3 |
Ⅲ关系运算符
1. 关系运算符
< | 小于 |
---|---|
<= | 小于等于 |
== | 等于 |
> | 大于 |
>= | 大于等于 |
!= | 不等于 |
2.关系表达式:简单的关系表达式由关系运算符及运算对象组成。如果关系为真,关系表达式的值为1;如果关系为假,关系表达式的值为0
Ⅳ逻辑运算符
逻辑运算符 | 含义 |
---|---|
&& | 与 |
|| | 或 |
! | 非 |
·当且仅当 exp1 和 exp2 都为真时 , exp1 && exp2 才为真。
·如果 exp1 或 exp2 为真, 则 exp1 || exp2 为真。
·如果 exp1 为假 , 则 !exp1 为真 ;如果 exp1 为真,则 !exp1 为假
·求值顺序:从左往右,一旦发现有使整个表达式为假的因素 , 立即停止求值。
Ⅴ条件运算符
1.形式:expression1 ?expression2 : expression3;
2.C语言中唯一的三目运算符(三个运算对象) 。
3.如果expression1为真,那么整个条件表达式的值与expression2相同;如果expression1为假,那么整个条件表达式的值与expression3相同
例:( 5 > 3 ) ? 1 : 2的之为1
Ⅵ逗号运算符
在C语言中,逗号既可以作分隔符,又可以作运算符。逗号作为分隔符使用时,用于间断说明语句中的变量或函数中的参数;作为运算符使用时,将若干个独立的表达式连接在一起,组成逗号表达式。其一般形式为:表达式1,表达式2,…,表达式n。其运算过程为:先计算表达式1,然后计算表达式2,…,最后计算表达式n,并将表达式n的值作为逗号表达式的值。
Ⅶ位运算符
位运算符都用于整型数据,之所以叫做按位运算,是因为这些操作都是针对每一个位进行,不影响它左右两边的位
~ | 按位取反 |
---|---|
& | 按位与 |
| | 按位或 |
^ | 按位异或 |
<< | 左移 |
>> | 右移 |
1.按位取反:~
一元运算符 ~ 把 1 变为 0,把 0 变为 1
例: ~(10011010)结果为
(01100101)
2.按位与:&
二元运算符 & 通过逐位比较两个运算对象,生成一个新值。对于每个位,只有两个运算对象中相应的位都为1时,结果才为1。
例:(10010011)&(00111101)结果为
(00010001)
3.按位或:|
二元运算符 | ,通过逐位比较两个运算对象,生成一个新值。对于每个位,如果两个运算对象中相应的位为1,结果就为1.
例: (10010011)|(00111101)结果为
(10111111)
4.按位异或:^
二元运算符 ^ 逐位比较两个运算对象。对于每个位,如果两个运算对象中相应的位一个为 1(但不是两个为1),结果为1.
例:(10010011)^(00111101)结果为
(10101110)
5.左移:<<
左移运算符(<<)将其左侧运算对象每一位的值向左移动其右侧运算对象指定的位数。左侧运算对象移出左末端位的值丢失,用0填充空出的位置。
例: (10001010)<< 2 结果为
(00101000)
6.右移:>>
同理左移(<<).
Ⅷ其他运算符
1.长度运算符sizeof():单目运算符,以字节为单位返回运算对象的大小。C语言规定,sizeof()返回size_t类型的值,这是一个无符号整数类型。
2.函数调用运算符()
3.下标引用运算符[]:用来表示数组元素
4.强制类型转换运算符(类型):强制类型转换
4.查找地址 &运算符:一元&运算符给出变量的存储地址
5.间接(解引用)运算符*:找出存储在某变量中的值
6.访问结构成员(.)(->)
二、优先级
三、类型转换
1.隐式类型转换
(1)升级或降级:所谓升级,就是从较小类型转换为较大类型
所谓降级,是指把类型转换成更低级别的类型。
(2)涉及两种类型的运算,两个值会被转换成两种类型的更高级别。
2.强制类型转换
即在某个量的前面用圆括号括起来类型名,该类型名即是希望转换成的目标类型。
四、表达式和语句
1.表达式
表达式是由运算符和运算对象组成的。最简单的表达式是一个单独的运算对象。C表达式的一个最重要特性就是,每个表达式都有一个值。
2.语句
1.语句时C程序的基本构建块。一条语句相当于一条完整的计算机指令。在C中,大部分语句以分号结尾。最简单的语句是空语句,即只有一个分号。C把末尾上加上一个分号的表达式都看作是一条语句,所以8;4+3;类似这样写也是可以的。
2.复合语句:用花括号括起来的一条或多条语句,复合语句也称为块。
本文参考以下链接,对此链接作者表达感谢:
https://blog.csdn.net/Poem_coder/article/details/121884095