- 1、 算术操作符
- 2、移位操作符
- 3、位操作符
- 4、赋值操作符
- 5、单目操作符
- 6、关系操作符
- 7、逻辑操作符
- 8、条件操作符
- 9、逗号操作符
- 10、下标引用
| 操作符 | 释义 |
|---|---|
| 算术操作符 | + - * / % |
| 移位操作符 | << >> |
| 位操作符 | & | ^ |
| 赋值操作符 | = |
| 单目操作符 | ! ~ ++ - - + - & * sizeof (类型) |
| 关系操作符 | > < >= <= != == |
| 逻辑操作符 | && || |
| 条件操作符(三目操作符) | a ? b : c |
| 逗号操作符 | a,b |
| 下标引用、函数调用、结构成员 | [] () . 和 箭头 |
| + | - | * | / | % |2、移位操作符
(1)<< :二进制位向左移动,左边丢弃,右边补0 (2)>> :二进制位向右移动: i:右边丢弃,左边补0(逻辑右移); ii:右边丢弃,左边补符号位(算术右移,常用) (3)移位不使用下面写法 a << -5; b >> -5;3、位操作符
(1)按位与 &
//只有整数才能使用位操作 int a = 3; int b = 5; //二进制位相同取1,不同取0 int c = a & b;//c结果为1 //a = 00000000000000000000000000000011 //b = 00000000000000000000000000000101 //c = 00000000000000000000000000000001
(2)按位或 |
//只有整数才能使用位操作 int a = 3; int b = 5; //二进制位有1为1,没有为0 int c = a | b;//c结果为7 //a = 00000000000000000000000000000011 //b = 00000000000000000000000000000101 //c = 00000000000000000000000000000111
(3)按位异或 ^
//只有整数才能使用位操作 int a = 3; int b = 5; //对应的二进制位异或相同为0,不同为1 int c = a | b;//c结果为6 //a = 00000000000000000000000000000011 //b = 00000000000000000000000000000101 //c = 000000000000000000000000000001104、赋值操作符
| = | += | -= | *= | /= | %= | >>= | <<= |5、单目操作符
(1)!
int flag = 1;
if (flag)
{
printf("flag为真n");
}
if(!flag)
{
printf("flag为假n");
}
(2) +、-
a = +a;// +:正值号,默认不写 b = -b;// -:负值
(3) ++、- -
++a:先++,再使用 a++:先使用,再++ --a:先--,再使用 a--:先使用,再--
(4) sizeof
//操作数的类型长度(以字节为单位)
int a = 5;
printf("%dn", sizeof(a));//计算a所占空间的大小,单位是字节
printf("%dn", sizeof(int));
printf("%dn", sizeof a);//sizeof是操作符,不是函数
char arr[5] = { 0 };
printf("%dn", sizeof(arr));//计算arr所占空间的大小,单位是字节
printf("%dn", sizeof(char [5]));
printf("%dn", sizeof arr);
short b = 5;
int c = 10;
printf("%dn", sizeof(b = c + 2));//结果为2
printf("%dn", b);//结果为5
//sizeof括号中放的表达式不参与运算
(5) ~
~ :对补码进行按位取反,1变为0,0变为1
(6) &、*
& :取地址操作符
* :解引用操作符(间接引用操作符)
int s = 10;
printf("%pn", &s);//打印16进制地址
int* ps = &s;//ps是用来存放地址,ps就是一个指针变量
*ps = 20;//解引用,间接访问s
printf("%dn", s);
(7)(类型)
int a = (int)3.14;6、关系操作符
| > | >= | <= | == | != |7、逻辑操作符
// &&:逻辑与,一假则假
if(a > b && a > c)
{
//a要同时大于b和c才满足条件
printf("&&")
}
// ||:逻辑或,一真则真
if(a > b || a > c)
{
//a大于b或者大于c都满足条件
printf("&&")
}
8、条件操作符
t = a > b ? a : b;// a大于b,t = a,否则t = b9、逗号操作符
exen_one((v1,v2),(v3,v4),v5,v6);
exen_two(v2,v4,v5,v6);
//exen_one和exen_two等价
//逗号表达式要从左到右依次计算,但是整个表达式的结果是最后一个表达式的结果
int a = 1;
int b = 2;
int c = (a = 8, b = b + 1, a -= b);
printf("%dn", c);//结果为5
10、下标引用
(1) [ ]下标引用操作符
// 操作数:一个数据名 + 一个索引值 int arr[10];//创建数值 arr[4] = 10;//实用下标引用操作符 //[ ]的两个操作数是arr和9,缺一不可
(2)( )函数引用操作符
#include//函数的定义 int Add(int x, int y) { return x + y; } int main() { //( )函数调用操作符 接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数 int x = 10; int y = 20; //函数的调用,()不能省略 int z = Add(x, y); printf("%d n", z);//结果为30 }
(3) 结构体与访问(点和箭头)
#include//创建一个自定义类型 struct Book { //结构体 //书:书名、书号、价格(结构体成员变量) char name[20]; char id[20]; int price; }; int main() { //初始化自定义类型 struct Book b = { "C语言","C123456",100 }; //结构体变量 . 成员名 printf("书名:%s n", b.name); printf("书号:%s n", b.id); printf("价格:%d n", b.price); printf("---------------n"); struct Book* p = &b; //结构体指针 -> 成员名 printf("书名:%s n", p -> name); printf("书号:%s n", p -> id); printf("价格:%d n", p -> price); printf("---------------n"); //结构体指针 . 成员名 printf("书名:%s n", (*p).name); printf("书号:%s n", (*p).id); printf("价格:%d n", (*p).price); }



