-
操作符分类
算术操作符移位操作符位操作符赋值操作符单目操作符关系操作符逻辑操作符条件操作符逗号表达式下标引用、函数调用和结构成员 -
算法操作符
-
+-*/%
- 内容解释
-
除了 % 操作符之外,其他的几个操作符可以作用于 整数和浮点数 。
-
对于 / 操作符如果 两个操作数都为整数 ,执行 整数除法 。而只要有 浮点数 执行的就是 浮点数除法 。
-
% 操作符的 两个操作数必须 为 整数 。返回的是整除之后的 余数 。
-
-
-
移位操作符:移位操作符的操作数只能是整数
-
左移操作符 <<
- 移位规则:左边抛弃、右边补0
-
右移操作符 >>
- 移位规则
1. 逻辑移位左边用0填充,右边丢弃2. 算术移位左边用原该值的符号位填充,右边丢弃
- code示例
#include <stdio.h> int main() { int num = 10; num = (num << 1); // 左移 printf("num = %d\n", num); // num = 20 num = (num >> 1); // 右移 printf("num = %d\n", num); // num = 10 num = -10; num = (num >> 1); // 右移 printf("num = %d\n", num); // num = -5 return 0; }
- 移位规则
-
-
位操作符
& // 按位与| // 按位或^ // 按位异或 -
赋值操作符 =
-
复合赋值符+=-=*=/=%=>>=<<=&=|=^=
-
代码示例
赋值操作符可以连续使用,比如: int a = 10; int x = 0; int y = 20; a = x = y+1;//连续赋值 // 那同样的语义,你看看: x = y+1; a = x; // 这样的写法是不是更加清晰爽朗而且易于调试。
-
-
单目操作符
-
单目操作符介绍
- 单目操作符
! 逻辑反操作(C语言中,所有0为false, 所有非0为true)- 负值+ 正值& 取地址sizeof 操作数的类型长度(以字节为单位)~ 对一个数的二进制按位取反-- 前置、后置 --++ 前置、后置 ++* 间接访问操作符(解引用操作符)( 类型 ) 强制类型转换
- 单目操作符
-
sizeof和数组
- code示例
#include <stdio.h> void test1(int arr[]) { // 相当于是: int * arr; printf("%d\n", sizeof(arr));//8 } void test2(char ch[]) { // 相当于是: char * arr; printf("%d\n", sizeof(ch));//8 } int main() { int arr[10] = { 0 }; char ch[10] = { 0 }; printf("%d\n", sizeof(arr));//40 printf("%d\n", sizeof(ch));//10 test1(arr); // 将指针传递给test1() test2(ch); // 将指针传递给test2() return 0; }
- code示例
-
-
关系操作符
>>=<<=!= 用于测试“不相等”== 用于测试“相等” -
逻辑操作符
&& 逻辑与|| 逻辑或 -
条件操作符
- 三元运算符:exp1 ? exp2 : exp3
-
逗号表达式
- 逗号表达式:exp1, exp2, exp3
-
逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。
-
下标引用、函数调用和结构成员
-
[ ] 下标引用操作符
- 操作数:一个数组名 + 一个索引值
- code示例
int arr[10];//创建数组 arr[9] = 10;//实用下标引用操作符。 // [ ]的两个操作数是arr和9。
-
( ) 函数调用操作符
-
接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。
-
-
访问一个结构的成员
-
. 结构体 . 成员名-> 结构体指针 -> 成员名
-
code示例
#include <stdio.h> 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 = 19; // 结构成员访问 } int main() { struct Stu stu; struct Stu* pStu = &stu; // 结构成员访问 stu.age = 20; // 结构成员访问 set_age1(stu); printf("stu.age = %d\n", stu.age); // 20 pStu->age = 22; // 结构成员访问 set_age2(pStu); printf("pStu->age = %d\n", pStu->age); // 19 return 0; }
-
-
-
表达式求值
-
隐式类型转换
- code示例
#include <stdio.h> int main() { //实例1 char a = 'a', b = 'b', c = 'c'; a = b + c; // b和c的值被提升为普通整型,然后再执行加法运算 // 加法运算完成之后,结果将被截断,然后再存储于a中 printf("%d\n", a); // -59 char f = 1; printf("%u\n", sizeof(f)); // 1 printf("%u\n", sizeof(+f));// 4 printf("%u\n", sizeof(-f));// 4 // 实例2中的,c只要参与表达式运算,就会发生整形提升,表达式 +c ,就会发生提升,所以 sizeof(+c) 是4个字节. // 表达式 -c 也会发生整形提升, 所以 sizeof(-c) 是4个字节, 但是 sizeof(c), 就是1个字节. return 0; }
- code示例
-
算术转换
-
如果某个操作数的类型在上面这个列表中排名较低,那么首先要转换为另外一个操作数的类型后执行运算。
-
code示例
float f = 3.14; int num = f;//隐式转换,会有精度丢失
-
-
操作符的属性
-
C语言基础:007 C基础语法 - 操作符
最新推荐文章于 2023-07-20 22:42:14 发布