1、C语言的运算符可以分为哪几类?
算术运算符:用于各类数值运算,包括+、-、*、/、%、++、--
关系运算符:用于比较运算,包括>、<、==、>=、<=、!=
逻辑运算符:用于逻辑运算,包括 &&、||、!
位操作运算符:参与运算的量,按二进制位参与计算,&,|,!,~,^,<<,>>
赋值运算符:用于赋值运算,分为简单赋值(=),和一些复合算数赋值和复合位运算赋值,三类共11种。
条件运算符:这是一个三目运算符,用于条件求值(?:)
逗号运算符:用于把若干表达式组合成一个表达式(,)
指针运算符:取内容*和取地址&
字节运算符:sizeof
特殊运算符:() 【】(数组下标),成员运算符(->、.)
2.运算符的优先级是怎么确定的?
优先级 | 运算符 | 名称或含义 | 使用形式 | 结合方向 | 说明 |
1 | [] | 数组下标 | 数组名[常量表达式] | 左到右 |
|
() | 圆括号 | (表达式)/函数名(形参表) |
| ||
. | 成员选择(对象) | 对象.成员名 |
| ||
-> | 成员选择(指针) | 对象指针->成员名 |
| ||
++ | 后置自增运算符 | ++变量名 | 单目运算符 | ||
-- | 后置自减运算符 | --变量名 | 单目运算符 | ||
2 | - | 负号运算符 | -表达式 | 右到左 | 单目运算符 |
(类型) | 强制类型转换 | (数据类型)表达式 |
| ||
++ | 前置自增运算符 | 变量名++ | 单目运算符 | ||
-- | 前置自减运算符 | 变量名-- | 单目运算符 | ||
* | 取值运算符 | *指针变量 | 单目运算符 | ||
& | 取地址运算符 | &变量名 | 单目运算符 | ||
! | 逻辑非运算符 | !表达式 | 单目运算符 | ||
~ | 按位取反运算符 | ~表达式 | 单目运算符 | ||
sizeof | 长度运算符 | sizeof(表达式) |
| ||
3 | / | 除 | 表达式/表达式 | 左到右 | 双目运算符 |
* | 乘 | 表达式*表达式 | 双目运算符 | ||
% | 余数(取模) | 整型表达式/整型表达式 | 双目运算符 | ||
4 | + | 加 | 表达式+表达式 | 左到右 | 双目运算符 |
- | 减 | 表达式-表达式 | 双目运算符 | ||
5 | << | 左移 | 变量<<表达式 | 左到右 | 双目运算符 |
>> | 右移 | 变量>>表达式 | 双目运算符 | ||
6 | > | 大于 | 表达式>表达式 | 左到右 | 双目运算符 |
>= | 大于等于 | 表达式>=表达式 | 双目运算符 | ||
< | 小于 | 表达式<表达式 | 双目运算符 | ||
<= | 小于等于 | 表达式<=表达式 | 双目运算符 | ||
7 | == | 等于 | 表达式==表达式 | 左到右 | 双目运算符 |
!= | 不等于 | 表达式!= 表达式 | 双目运算符 | ||
8 | & | 按位与 | 表达式&表达式 | 左到右 | 双目运算符 |
9 | ^ | 按位异或 | 表达式^表达式 | 左到右 | 双目运算符 |
10 | | | 按位或 | 表达式|表达式 | 左到右 | 双目运算符 |
11 | && | 逻辑与 | 表达式&&表达式 | 左到右 | 双目运算符 |
12 | || | 逻辑或 | 表达式||表达式 | 左到右 | 双目运算符 |
13 | ?: | 条件运算符 | 表达式1? 表达式2: 表达式3 | 右到左 | 三目运算符 |
14 | = | 赋值运算符 | 变量=表达式 | 右到左 |
|
/= | 除后赋值 | 变量/=表达式 |
| ||
*= | 乘后赋值 | 变量*=表达式 |
| ||
%= | 取模后赋值 | 变量%=表达式 |
| ||
+= | 加后赋值 | 变量+=表达式 |
| ||
-= | 减后赋值 | 变量-=表达式 |
| ||
<<= | 左移后赋值 | 变量<<=表达式 |
| ||
>>= | 右移后赋值 | 变量>>=表达式 |
| ||
&= | 按位与后赋值 | 变量&=表达式 |
| ||
^= | 按位异或后赋值 | 变量^=表达式 |
| ||
|= | 按位或后赋值 | 变量|=表达式 |
| ||
15 | , | 逗号运算符 | 表达式,表达式,… | 左到右 | 从左向右顺序运算 |
同一优先级的运算符,运算次序由结合方向所决定
简单归纳为:!>算数运算符>关系运算符>&&>||>赋值运算符
3、什么时候使用条件表达式比较多?
如果在条件语句中,只执行单个的赋值语句时,使用的比较多。
4.条件运算符的用法
条件运算符:(?:)
用一个简单的例子来说明。
if(a>b)
{max=a;}
else
{max=b;}
用条件运算符表示的条件表达式为:max=(a>b)?a:b;
5、逻辑运算符参与运算时注意什么?
逻辑运算符|两边的条件,只要有一个为真,则结果为真,只要有一个为假,其加过为假。
6、++,--操作符的注意事项有哪些?
++是自增1,--是自减1。
++a是自增1再用a进行运算,a++是先将a用于运算再自增1
7、位操作为什么可以有效提高程序运行的效率?
在计算机程序中,数据的位是可以操作的最小数据单位,理论上可以用“位运算”来完成所有的运算和操作,其非常的灵活。
8、位运算中的左移和右移是什么样的?
左移和右移一样,将数字以二进制补码的形式,向左或向右依次移动指定的位数
左移:
格式:需要移位的数字 << 移位的次数
运算规则:按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。
数学意义:在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的次方。
右移:
格式:需要移位的数字 >> 移位的次数
运算规则:按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1。
数学意义:右移一位相当于除2,右移n位相当于除以2的n次方。这里是取商。
9、位运算的作用?
在计算机中,数据的位是可以操作的最小的数据单位,一般的位操作是用来控制硬件的,或者进行行数据的交换,但是灵活的位操作可以有效地提高程序运行的效率。
10、位运算除了提高运算效率外,再嵌入式系统编程中,还有啥广泛运用?
位间的与(&)、或(I)、非(~)。