运算符与表达式(入门)

1.算术运算符

注意:%是算术运算的重点,一般运用在将某个数值控制在一定范围内

2.单目运算(前后缀运算)

1. 前缀自加自减运算:先进行自加自减,再参与表达式运算
2. 后缀自加自减运算:先参与表达式运算,在进行自加自减
例如:
 
int a = 10;
int b = 20;

int c = ++a; // a先自加1,变成11;然后再赋值给c,因此c等于11
int d = b++; // b先赋值给d,因此d等于20,然后b自加1,变成21
int e = --a; // a先自加1,变成11;然后再赋值给e
int f = b--; // b先赋值给f,然后b自加1

3.关系运算符

注意:

关系运算符用于判断运算符两边的表达式是否满足给定的大小条件
由关系运算符组成的表达式称为关系表达式,其值为布尔型
如果关系成立 true 1
如果关系不成立 false 0
判断是否相等是双等号 ==,而不是一个等号

4.逻辑运算符(对整个变量进行操作)

运算规则:

逻辑反:将逻辑真、假翻转,即真变假,假变真
逻辑与:将两个关系表达式串联起来,当且仅当左右两个表达式都为真时,结果为真。
逻辑或:将两个关系表达式并联起来,当且仅当左右两个表达式都为假时,结果为假。

特殊规则:C语言是一种惰性语言
在逻辑与运算中,如果左边表达式的值为假,那么右边表达式将不被执行。
在逻辑或运算中,如果左边表达式的值为真,那么右边表达式将不被执行。

5.位运算符(重点)

对整个变量的某一位进行操作

单片机寄存器中、数据处理(bmp图像处理)

运算符名称举例功能说明
~位逻辑反~a将变量中的每一位取反
&位逻辑与a&b将变量a和b逐位进行与操作
|位逻辑或a|b将变量a和b逐位进行或操作
^位逻辑异或a^b将变量a和b逐位进行异或操作
<<左移a<<4将变量中a中的每一位向左移动4位
>>右移b>>3将变量中b中的每一位向右移动3位
将每一个变量转换成二进制后再按位取反
位运算符操作的对象是数据中的每一位

运算规则:
位逻辑反、位逻辑与、位逻辑或拥有与逻辑运算相似的规则和一样的真值表。
异或运算:相同为0,不同为1
移位运算:移出去的不要,空出来的补零。移位运算都是针对无符号数的运算。

~:按位取反---单目运算,数据将每一个bit位进行取反,1001
&:按位与,两个都为1,结果才为1
| : 按位或,两个都为0,结果才为0
^ : 按位异或操作,不同为1,相同为0
<< : 左移,按位往左移动
        无符号左移(重点)
        
        往左移动,移出的丢弃,空出的补零,对无符号左移,移动n位就乘以 2 n 次方
        有符号左移

        1. 将负数的原码转为补码
        2. 将补码进行左移
        3. 将左移后的补码再转为原码
>>:右移操作
        无符号右移

        往右移动,移出的丢弃,空出的补零
        对无符号右移,移动n 位就除以 2 n 次方
        有符号右移
        1. 将负数的原码转为补码
        2. 将补码进行右移 , 空出来的补符号位 ( linux 系统 )
        3. 将右移后的补码再转为原码

6.特殊运算符

1.赋值运算符 =
如果有赋值语句 X=10 ;则其表示的含义为:将变量 y 的内容赋值给变量 X的地址所对应的那块内存。
如果有赋值语句 X=10 ;则其表示的含义为:将常量 10 的值赋值给变量X 的地址所对应的那块内存。
这就是为什么 变量的地址被称为 左值( lvalue ),而其内容又被称为右值(rvalue )的原因。

注意:

不能对常量赋值
只能对变量赋值
不能对数组赋值
可以连续赋值,从右往左
int a, b;
int x[5];
a = 100; // 对变量 a 赋值,正确
b = a; // 对变量 a 赋值,正确
3 = 100; // 对常量 3 赋值,错误!
x = 123; // 对数组 b 赋值,错误!
a + 3 = 200; //只能对变量赋值,错误!
// 连续赋值
a = b = 50; // 先将 50 赋给 b,再将 b 的值赋给 a,正确33
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

2.复合赋值符
当左右两边有相同的操作数时,采用复合赋值符不仅直观,且能提高运算效率
除了下述 10 个复合运算符之外,生造别的复合运算符是非法的
// 加减乘除:
a += n; // 等价于 a = a+n;
a -= n; // 等价于 a = a-n;
a *= n; // 等价于 a = a*n;
a /= n; // 等价于 a = a/n;
// 求余:
a %= n; // 等价于 a = a%n;
// 位运算:
a &= n; // 等价于 a = a&n;
a |= n; // 等价于 a = a|n;
a ^= n; // 等价于 a = a^n;
a >>= n; // 等价于 a = a>>n;
a <<= n; // 等价于 a = a<<n;
a **= 2; //不合法
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==
3.内存取址符

7.条件运算符(三目运算符)

唯一需要三个操作数的运算符(相当于一个 if.......else...... 语句)
语法:表达式1?表达式2:表达式3
释义:当表达式1为真时,去表达式2,否则取表达式3

8.sizeof 运算符

含义:计算指定数据类型或者变量所占据内存的字节数(不是函数)
语法:sizeof(类型)sizeof(变量),计算变量的字节数时圆括号可以省略

例:

printf("%d\n", sizeof(int));
printf("%d\n", sizeof(long double));
int a[5];
printf("%d\n", sizeof(a));
printf("%d\n", sizeof a);

9.return运算符

含义:退出某个函数(如果退出的是主函数main,那么整个程序也就推出)
语法:必须出现在函数体内,可以带函数对应类型的数据
主函数的return 0表示正常退出程序,非0异常退出程序

例:

10.逗号运算符表达式

(表达式1,表达式2,表达式3.... 表达式n)
求值顺序:
先求表达式1,再求表达式2,再求表达式3,最后求表达式n
整个逗号表达式的值为表达式n的值
注意:
逗号表达式的优先级最低
运算顺序是从左往右
整个表达式的值为表达式最右边的值

10.优先级与结合性

当表达式出现不同的运算符时,根据优先级来决定谁先执行,比如先乘除后加减
当表达式中出现多个相同优先级的运算符时,更具结合性决定谁先运行,比如从左到右

注意:

虽然我们可以根据优先级和结合性,来表示复杂的表达式,但是这种做法是不推荐的,当我们需要用到比较复杂的表达式时。
1 、我们可以考虑拆分,使之不要太长,难以看清表达式分量的逻辑关系。
2 、如果不得已要使用复杂表达式,则推荐使用圆括号将需要先计算的表达式括起来。
  • 22
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值