操作符
C语言运算符是说明特定操作的符号,它是构造C语言表达式的工具。C语言的运算异常丰富,除了控制语句和输入输出以外的几乎所有的基本操作都为运算符处理。
分类:
算术操作符
移位操作符
位操作符
赋值操作符
单目操作符
关系操作符
逻辑操作符
条件操作符
逗号表达式
下标引用、函数调用和结构成员
算术操作符
-
定义
算术运算符即算术运算符号。是完成基本的算术运算 符号,就是用来处理四则运算的符号。
-
内容
+ 加法运算 - 减法运算 * 乘法运算 / 除法运算 % 求余运算
-
注意
I.除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。 II.对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。 III.% 操作符的两个操作数必须为整数。返回的是整除之后的余数。
移位操作符
-
定义
移位运算符在程序设计中,是位操作运算符的一种。移位运算符可以在二进制的基础上 对数字进行平移
-
内容
<< 左移操作符 >> 右移操作符
-
注意
左移操作符 移位规则: 左边抛弃、右边补0 右移操作符 移位规则: 首先右移运算分两种: a. 逻辑移位 左边用0填充,右边丢弃 b. 算术移位 左边用原该值的符号位填充,右边丢弃 特别 : 对于移位运算符,不要移动负数位,这个是标准未定义的。
位操作符
-
定义
位操作是程序设计中对位模式按位或二进制数的一元和二元操作。
-
内容
& 按位与 | 按位或 ^ 按位异或
-
注意
他们的操作数必须是整数。
赋值操作符
-
定义
基本的赋值运算符是“=”。他的优先级别低于其他的运算符,所以对该运算符往往最后读取。
-
内容
复合赋值符
+= 加法赋值 -= 减法赋值 *= 乘法赋值 /= 除法赋值 %= 模运算赋值 <<= 左移赋值 >>= 右移赋值 &= 位逻辑与赋值 |= 位逻辑或赋值 ^= 位逻辑异或赋值
单目操作符
-
定义
单目运算是指运算符包括赋值运算符、算术运算符、逻辑运算符、位逻辑运算符、位移运算符、关系运算符、自增自减运算符。
-
内容
! 逻辑反操作 - 负值 + 正值 & 取地址 sizeof 操作数的类型长度(以字节为单位) ~ 对一个数的二进制按位取反 -- 前置、后置-- ++ 前置、后置++ * 间接访问操作符(解引用操作符) * (类型) 强制类型转换
-
注意
++a 先对a进行自增,然后对使用a,也就是表达式的值是a自增之后的值。 --a 先对a进行自减,然后对使用a,也就是表达式的值是a自减之后的值。 a++ 先对a先使用,再增加。 a-- 先对a先使用,再自减
关系操作符
-
定义
关系运算符有6种关系,分别为小于、小于等于、大于、等于、大于等于、不等于。
-
内容
< 小于 a<b a小于b时返回真;否则返回假。 <= 小于等于 a<=b a小于等于b时返回真;否则返回假。 > 大于 a>b a大于b时返回真;否则返回假。 >= 大于等于 a>=b a大于等于b时返回真;否则返回假。 == 等于 a==b a等于b时返回真;否则返回假。 != 不等于 a!=b a不等于b时返回真;否则返回假。
-
注意
a.在编程的过程中== 和=不小心写错,导致的错误。 b.前4种关系运算符的优先级别相同,后两种也相同。前四种高于后两种。 c.关系运算符的优先级低于算术运算符。 d.关系运算符的优先级高于赋值运算符。
逻辑操作符
-
定义
在形式逻辑中,逻辑运算符或逻辑联结词把语句连接成更复杂的复杂语句。
-
内容
&& 逻辑与 || 逻辑或
-
注意
区分逻辑与和按位与 区分逻辑或和按位或 逻辑与和或的特点: 1&2----->0 1&&2---->1 1|2----->3 1||2---->1
条件操作符 (三目运算符)
-
定义
它是唯一有3个操作数的运算符,有时又称为三元运算符。一般来说,三目运算符的结合性是右结合的。
-
内容
exp1 ? exp2 : exp3·
-
注意
在C语言中,结果1 和 结果2的类型必须一致。
逗号表达式
下标引用、函数调用和结构成员 1. 定义
c语言提供一种特殊的运算符,逗号运算符,优先级别最低,它将两个及其以上的式子联接起来,从左往右逐个计算表达式,整个表达式的值为最后一个表达式的值。
-
内容
exp1, exp2, exp3, …expN
-
注意
a. 逗号表达式的运算过程为:从左往右逐个计算表达式。 b. 逗号表达式作为一个整体,它的值为最后一个表达式(也即表达式n)的值。 c. 逗号运算符的优先级别在所有运算符中最低。
下标引用、函数调用和结构成员
1.[ ] 下标引用操作符
操作数:一个数组名 + 一个索引值。
int arr[10];//创建数组
arr[9] = 10;//实用下标引用操作符。
[ ]的两个操作数是arr和9。
2.( ) 函数调用操作符 接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数
#include
void test1()
{
printf("hehe\n");
}
void test2(const char *str)
{
printf("%s\n", str);
}
int main()
{
test1(); //实用()作为函数调用操作符。
test2("hello bit.");//实用()作为函数调用操作符。
return 0;
}
3.访问一个结构的成员
. 结构体.成员名
-> 结构体指针->成员名
#include
struct Stu
{
char name[10];
int age;
char sex[5];
double score;
};
void set_age1(struct Stu stu)
{
stu.age = 18;
}
void set_age2(struct Stu* pStu)
{
pStu->age = 18;//结构成员访问
}
int main()
{
struct Stu stu;
struct Stu* pStu = &stu;//结构成员访问
tu.age = 20;//结构成员访问
set_age1(stu);
pStu->age = 20;//结构成员访问
set_age2(pStu);
return 0;
}
附录