c语言操作符总结
一、算术操作符
+ - * / %
这些都是最基本的:
1> 除了%以外,其他几个都可以用于浮点数和整数
2> % 操作符两边必须为整数
3> / 操作符 左右两边至少一边为浮点数时,才能输出小数
如:
3 / 5 结果为 0
3.0 / 5 结果为 0.6
二、移位操作符
<< 左移操作符
>> 右移操作符
左移操作符 移位规则:
左边抛弃,右边补0
右移操作符 移位规则:
分为两种:
1> 逻辑移位,右边抛弃,左边补0
2> 算术移位,右边抛弃,左边补原来值的符号位(正数为0,负数为1)
警告:对于移位运算符,不要移动负数位,这个是标准未定义的。
三、位操作符(二进制)
& //按位与
| //按位或
^ //按位异或
注意:操作数必须都为整数
举个栗子:
int main()
{
int a = 10;
int b = 20;
printf("%d\n", a & b);
printf("%d\n", a | b);
printf("%d\n", a ^ b);
system("pause");
return 0;
}
运行结果:
0
30
30
四、赋值操作符
赋值操作符在之前的程序代码中经常出现,其操作符有:=、+=等。
注意在连续赋值时,应从右往左赋值,例如:
a=x=y+1;
输出时a的值就应是y+1。
复合赋值操作符:就是之前学的双目操作符的改良版本。如:+= -+ *= %=
五、单目操作符
! 逻辑取反
- 负值
+ 正值
& 取地址
sizeof 操作数类型长度(以字节为单位)
~ 对一个数的二进制按位取反
-- 前置、后置--
++ 前置、后置++
* 间接访问操作符
(类型) 强制类型转换
1> ! 0!—>> 1 1!–>> 0
2> & 取地址 &a —>> 取a的地址(指针会详细讲解)
3> sizeof()
int main()
{
printf("%d\n", sizeof(short));
printf("%d\n", sizeof(int));
printf("%d\n", sizeof(long));
printf("%d\n", sizeof(long long));
printf("%d\n", sizeof(float));
printf("%d\n", sizeof(double));
printf("%d\n", sizeof(int*));
printf("%d\n", sizeof(float*));
system("pause");
return 0;
}
运行结果:
2
4
4
8
4
8
4
4
4>后置++
int main()
{
int a = 3;
printf("%d\n", a++);
printf("%d\n", a);
system("pause");
return 0;
}
运行结果:
3
4
前置++
int main()
{
int a = 3;
printf("%d\n", ++a);
printf("%d\n", a);
system("pause");
return 0;
}
运行结果:
4
4
5> * 指针详讲
6> (类型)
举个栗子:
int main()
{
int num = 0;
float f = 3.14;
num = (int)f;
printf("num=%d\n", num);
system("pause");
return 0;
}
运行结果:
num=3
六、关系操作符
>
<
>=
<=
==
!=
注意:== 和 = 的区别
七、逻辑操作符
&&
||
举个栗子:
1 && 0 ---> 0
0 && 0 ---> 0
1 && 1 ---> 1
1 || 0 ---> 1
1 || 1 ---> 1
0 || 0 ---> 0
注意:&&和& || 和| 的区别
八、条件运算符
exp1 ? exp2 : exp3
举个栗子:
int main()
{
int a = 10;
int b = 20;
printf("%d\n", a > b ? a : b);
system("pause");
return 0;
}
运行结果:
20
九、逗号表达式
exp1 , exp2 ,exp3,…… expn
注意:逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。
十、下标引用、函数调用和结构成员
[]
()
->
1> []
一个数组+一个索引值
举个栗子:
int arr[10];
arr[0] = 5;
2> () 函数调用操作符
接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数是传递给函数的参数.
3> -> 访问一个结构体成员
struct student
{
char name[100];
char sex;
};
int main()
{
struct student s1 = { "小米",'n' };
struct student * p = &s1;
printf("%s\n", strcpy(p->name, "小明"));
p->sex = 'v';
printf("%c\n",p->sex);
system("pause");
return 0;
}
运行结果:
小明
v