1.算数操作符: + - * / %
注意: 对于%取模运算操作符要求左右操作数必须为整数.
对于/操作符如果左右操作数为整数,执行整数除法.但只要有浮点类型执行的就是浮点类型除法
int main() { int a= 7/2; //结果为a = 3 double b = 7/2; //结果为3.000000 double c = 7.0/2; //结果为3.500000 double d = 7/2.0; //结果为3.500000 return 0; }
2.移位操作符: << 左移 >> 右移 ( 逻辑右移/算术右移 )
这里的位指的是数据存储进内存的二进制位,即补码
int main() { int a = 14; printf("%d\n", a<<1);//结果为28 printf("%d\n", a>>1);//结果为7 说明是算数右移 return 0; }
不难看出: 左移1相当于 *2 (丢弃最高位,0补最低位) 算数右移1相当于/2(左边补原来符号位) 逻辑右移(左边补0)
3. 位操作符: & 按位与 | 按位或 ^ 按位异或
int main() { int a = 10; int b = 25; double c = 25.0; printf("%d\n", a&b);//8 printf("%d\n", a|b);//27 printf("%d\n", a^b);//19 printf("%f\n", a&c);//编译报错 system("pause"); return 0; }
注意: 左右操作数必须为整数.
5.赋值操作符
= += *= /= %= <<= >>= &= |= ^=
6.单目操作符
! 逻辑反操作- 负值+ 正值& 取地址sizeof 操作数的类型长度(以字节为单位)~ 对一个数的二进制进行按位取反-- 前置,后置--++ 前置,后置++* 间接访问操作符(解引用操作符)(类型) 强制类型转换//sizeof和数组
void test1(int arr[]) { printf("%d\n", sizeof(arr)); //4 } void test2(int ch[]) { printf("%d\n", sizeof(ch)); // 4 }
int main() { int arr[10] = { 0 }; int ch[10] = { 0 }; printf("%d\n", sizeof(arr));// 40 printf("%d\n", sizeof(ch));// 40 test1(arr); test2(ch); system("pause"); return 0; }
//前置++,--和后置++,--使用
int main() { int a = 10; int x = ++a;//先对a自加,再进行使用 11 11 printf("%d %d\n", a, x); int y = --a;//先对a自减,再进行使用 10 10 printf("%d %d\n", a, y); int z = a--;//先使用,再进行自减 9 10 printf("%d %d\n", a, z); int s = a++;//先使用,再进行自加 10 9 printf("%d %d\n", a, s); system("pause"); return 0; }
7.关系操作符: > >= < <= != == (注意:只需区分==和=区别即可)
8.逻辑操作符: && 逻辑与 || 逻辑或
int main() { int i = 0, j = 0, a = 0, b = 2, c = 3, d = 4; i = a++ && ++b && d++; //j = a++ || ++b || d++; printf("a=%d b=%d c=%d d=%d i=%d", a, b, c, d,i); //a=1 b=2 c=3 d=4 i=0 //printf("a=%d b=%d c=%d d=%d j=%d", a, b, c, d, j); //a=1 b=3 c=3 d=4 j=4 system("pause"); return 0; }
9..条件运算符
格式: exp1 ? exp2 :exp3
10.逗号表达式
exp1,exp2,exp3,.......expN
执行规则,从左到右依次执行,,但结果是最后一个表达式的结果.
11.下标引用,函数调用和结构体成员
(1)下标引用操作符
操作数:一个数组名+一个索引值
int arr[10];//创建数组
arr[9] = 10;//使用下标引用符
// [ ]的两个操作数是arr和9
(2)函数调用操作符
接受一个或者多个操作数:第一个是函数名,剩下的操作数就是传递给函数的参数.
void test ()
{
printf( " hehe\n" );
}
int main()
{
test(); //使用()作为函数调用操作符.
return 0;
}
(3)访问一个结构的成员.
.结构体.成员->结构体指针->成员名
#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* stu) { pStu->age = 18; //结构成员访问 } int main() { struct Stu stu; struct Stu* pstu = &stu; //结构成员访问 stu.age = 20; //结构成员访问 set_age1(stu); pStu->age = 20; //结构成员访问 set_age2(pStu); system("pause"); return 0; }