一 操作符
1 算术操作符 + - * / %
当/两端都是整数时,执行整数除法,两端只要有一个浮点数则执行浮点数除法
double ret=10/3.0;
printf("%lf",ret);
% 的两端必须是整数,返回值也是整数
2 移位操作符
移位操作符的操作数只能是整数
<<左移操作符
#include<stdio.h>
int main()
{
int a=5;
int b=a<<2;
//把a在内存中储存的二进制位向左移动2位
printf("%d\n",b);
return 0;
}
>>右移操作符
算术右移:右边丢弃,补原来的符号位
逻辑右移:右边丢弃,补0
算术右移还是逻辑右移取决于编译器
一般的编译器为算术右移
#include<stdio.h>
int main()
{
int a=5;
int b=a>>1;
printf("%d\n",b);
return 0;
}
移位时不要移负数位
3 位操作符 &按位与 |按位或 ^按位异或
#include<stdio.h>
int main()
{
int a=3;
int b=-5;
int c=a&b;
int d=a|b;
int e=a^b;
printf("%d %d %d\n",c,d,e);
return 0;
}
4 赋值操作符 =
int a=10;
a=100;
左值放在=左边,一般是一块空间
右值放在=右边,一般是一个值或一块空间内容
复合赋值符 += -= *= /=
#include<stdio.h>
int main()
{
int a=0;
a+=10;
printf("%d",a);
return 0;
}
5 单目操作符
只控制一个操作数
! 反逻辑操作符
#include<stdio.h>
int main()
{
int a=0;
int b=5;
printf("%d %d\n",!a,!b);
}
0的逻辑反为1,正数的逻辑反为0
- 负值
#include<stdio.h>
int main()
{
int i=0;
int flag=1;
for(i=0;i<10;i++)
{
printf("%d ",i*flag);
flag=-flag;
}
return 0;
}
& 取地址
#include<stdio.h>
int main()
{
int a=0;
printf("%p",&a);
return 0;
}
sizeof 计算操作数的类型长度(以字节为单位)
#include<stdio.h>
int main()
{
int a=0;
printf("%d\n",sizeof(a));
return 0;
}
~ 按位取反
#include<stdio.h>
int main()
{
int a=0;
printf("%d\n",~a);
return 0;
}
++ --
前置++(--),先++(--),后使用
#include<stdio.h>
int main()
{
int a=10;
int b=++a;
printf("a=%d b=%d\n",a,b);
return 0;
}
int main()
{
int a=10;
int b=--a;
printf("a=%d b=%d\n",a,b);
return 0;
}
后置++(--),先使用,后++(--)
#include<stdio.h>
int main()
{
int a=10;
int b=a++;
printf("a=%d b=%d\n",a,b);
return 0;
}
#include<stdio.h>
int main()
{
int a=10;
int b=a--;
printf("a=%d b=%d\n",a,b);
return 0;
}