1、算术操作符
+ - * / %
(1) 对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。
(2)% 操作符的两个操作数必须为整数。返回的是整除之后的余数。
2、移位操作符(二进制的计算和存储)
>> <<
3、位操作符
& ^ |
& :按位与
^ :按位异或
| :按位或
4、赋值操作符
= += -= *= /= %= &= |= >>= <<=
a=10;其中“=”就是赋值操作符
a+=5就相当于a=a+5
5、单目操作符(只有一个操作数的操作符)
! - + & sizeof ~ -- ++ * (类型)
(1)! :逻辑反操作
//c语言中的真假
0表示假,非0表示真。
a=5 !a=0
a=0 !a=1//语法规定,假变成真用1表示真
(2)+ -:正负值
(3)&:取地址
(4)sizeof:操作数的类型长度(以字节为单位)
sizeof是操作符,不是函数!
#include<stdio.h>
int main()
{
int a=10;
printf("%d",sizeof(a));//sizeof(a)也可以写成sizeof a,变量括号可以省略,但不建议省略
printf("%d",sizeof(int));//类型名括号不能省略
return 0;
}
sizeof也可以计算数组的大小
int main()
{
int arr[10]={0};
printf("%d\n",sizeof(arr));//40,计算的是数组的总大小,单位是字节
printf("%d\n",sizeof(arr[0]));//4,计算的是数组第一个元素的大小
printf("%d\n",sizeof(arr)/sizeof(arr[0]));//10,计算的是数组元素的个数
return 0;
}
sizeof与strlen
a、sizeof是操作符,它只关注占据了多大内存空间,不关注内存中存放的数据,返回值的单位是字节。
b、strlen是库函数,是求字符串长度的,它关注字符串中是否有“\0”,统计\0之前出现的所有字符的个数。
int main()
{
char arr1[]="bym";
char arr2[]={'b','y','m'};
printf("%d\n",strlen(arr1));//3
printf("%d\n",strlen(arr2));//随机值
printf("%d\n",sizeof(arr1));//4,包括\0
printf("%d\n",sizeof(arr2));//3
return 0;
}
(5)~:对一个数的二进制按位取反
(6)++ --:
前置++,先++,后使用
后置++,先使用,后++
int main()
{
int a=10;
int b=++a;//a=a+1,b=a>>a=11,b=11
int c=10;
int d=c++;//d=c,c=c+1>>c=11,d=10
printf("%d %d %d %d",a,b,c,d);
return 0;
}
(7)*:间接访问操作符
(8)(类型)强制转换类型
int main()
{
int a=(int)3.14;
printf("%d\n",a);//结果是3!
return 0;
}
7、关系操作符
> >= < <= != ==
= :赋值
==:判断相等
8、逻辑操作符
&&:逻辑与
||:逻辑或
9、三目操作符
exp1?exp2:exp3
10、逗号表达式
exp1,exp2,exp3,……
int main()
{
int a = 5;
int b = 8;
int c = 4;
int d = (a = b - 3, b = a + c, c = a - b, a = c + 2);
//a=8-3=5;b=5+4=9;c=5-9=-4;a=-4+2=-2;
printf("%d\n", d);
return 0;
}
逗号表达式会从左向右依次计算,但是整个表达式的结果是最后一个表达是的结果
11、下标引用、函数调用和结构成员
[ ] ( ) . ->
(1)[ ]:下标引用操作符
操作数:一个数组名+一个索引值
int arr[10];//创建数组
arr[0]=5;//[]的两个操作数是arr和0
(2)( ):函数调用操作符
接受一个或多个操作数:第一个操作数是函数名,剩余操作数就是传递给函数的参数
(3). :结构体.成员名
(4)-> :结构体指针->成员名