操作符
-
算数操作符:+ - * / %
float a = 9/2.0;printf("%f\n", a); //计算9除以2得4.5 int a = 9%2; printf("%d\n", a); // %-取余数得1
-
位移操作符:>> <<
int main { int a = 2; int b = a << 1; //左移操作符--移动的是二进制位 printf("%d\n", b); return 0; }
3.位操作符:&(按位与)|(按位或)^(按位异或)
4.赋值操作符:= += -= /= &= ^= |= >>= <<=
a = a+5;// a+= 5;
a = a-3;// a-= 3;
a = a%3;// a%= 3;
5.单目操作符:!(逻辑反操作)-(负值)+(正值)&(取地址)sizeof(操作数得类型长度)~(第一个数得二进制按位取反)--(前置 后置--)++(前置 后置++)*(间接访问操作符) (类型)-强制转换类型
a+b +有两个操作数,双目操作符 单目操作符:只有一个操作数
!使用:(逻辑反操作)
int a = 0;//c语言中,0表示假,非0就是真
printf(“%d\n”, !a);//把假变真
int a = 10;
printf(“%d\n”,!a);//把真变假
if(a)
{
//如果a为真,做事
}
if(!a)
{
//如果a为假,做事
}
sizeof的使用:
int main()
{
int a =10;//sizeof是一个操作符,不是函数
printf("%d\n", sizeof(int));//计算类型或变量的大小
printf("%d\n", sizeof(a));//打印出int和a的大小一样
return 0;
}
int main()
{
int arr[10] = {0}; //10*4=40
printf("%d\n", sizeof(arr));//计算数组的总大小40字节,10个元素,每个元素是一个int,一个int4字节
printf("%d\n", sizeof(arr[0]));//计算第一个元素大小是4字节
int sz = sizeof(arr) / sizeof(arr[0]);//计算数组元素个数,总大小除以一个元素大小
printf("%d\n", sz);//10个
return 0;
}
~的使用:按(二进制)位取反,把所有二进制位中的数字,1变0,0变1
#include <stdio.h>
int main()
{
int a = 0;
printf("%d\n", ~a);//~按位取反
return 0;
}

++(前置 后置++)的使用
int main()
{
int a = 10;
int b = ++a;//前置++,先++,再使用
printf("%d\n",b);//结果11
printf("%d\n",a);//结果11
return 0;
}
int main()
{
int a = 10;
int b = a++;//后置++,先使用,再++(a=a+1)
printf("%d\n",b);//结果10
printf("%d\n",a);//结果11
return 0;
}
6.关系操作符:> >= < <= !=(不相等) ==(相等)
7.逻辑操作符:&&(逻辑与) | |(逻辑或)
&&使用:且的意思
int main
{
int a =3;
int b =5;
int c = a && b;
printf("%d\n", c);//结果为1,为真
return 0;
}
8.条件操作符(三目操作符):exp1 ? exp2 : exp3
exp1成立,exp2计算,整个表达式的结构是:exp2的结果
exp1不成立,exp3计算,整个表达式的结构是:exp3的结果
eg:
int main()
{
int a = 0;
int b = 3;
int max = 0;
if (a>b)
max = a; 写成条件操作符:max = a > b ? a : b; //如果a>b,得a,否则得b
else
max = b;
return 0;
}
9.逗号表达式:exp1,exp2,exp3,...expN
#include <stdio.h>
int main()
{
int a = 0;
int b = 3;
int c = 5;//a=5 c=1 b=3
int d = (a = b + 2, c = a - 4, b = c + 2);//逗号表达式,是从左往右依次计算,整个表达式的结果是最后一个表达式的结果
printf("%d\n", d);//结果为3
return 0;
}
10.下标引用,函数调用和结构成员:[] () . ->
11.赋值运算符