C语言操作符总结
算术操作符
+ - * / %
1.%操作符的两个操作数必须为整数,返回的是整除后的余数。
2.对于 / 操作符,如果两个操作数都是整数则执行整数除法,只要有浮点数就执行浮点数除法。
移位操作符
<< 左移操作符
>> 右移操作符
左移操作符移位规则:
左边抛弃,右边补0
右移操作符移位规则:
右移分为两种:
1.逻辑移位
左边用0
补,右边丢弃
2.算术移位
左边用原来的符号位
填充,右边丢弃(符号位中0
表示正号,1
表示负号)
大多数编译器都是用的算术移位
。
**对于移位运算符,不要移动负数位,这个是标准未定义的**
位操作符
& 按位与
010101010
101011101
000001000
| 按位或
0101010101
1010101010
1111111111
^ 按位异或
101001011
011001101
110000110
他们的操作数都必须是整数
可以用按位异或来实现两个数的交换
#include <stdio.h>
int main ()
{
int a = 10;
int b = 20;
a = a^b;
b = a^b;
a = a^b;
printf("a = %d,b =%d\n",a,b);
return 0;
}
赋值操作符
int a = 10;
int b = 20;
复合赋作符
+= //i += 1相当于 i = i + 1
-=
*=
/=
%=
>>=
<<=
&=
|=
^=
单目操作符
! 逻辑反操作
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位)
~ 对一个数的二进制按位取反
-- 前置、后置++
* 间接访问操作符(解引用操作符)
(类型) 强制类型转换
i++ 是先用在加
++i 是先加在用
i--和--i同理
关系操作符
>=
>
<
<=
!=
==
在编程中我们一不小心会把==
写成=
,所以我们把常量写在变量的前面
比如:
if (1 == num)
逻辑操作符
&& 逻辑与
|| 逻辑或
&& 全真为真,有一个为假就是假。
当几个 && 连用时,从左向右依次判断,若判断为假时,后面的运算就不执行了。
如:i = exp1 && exp2 && exp3 当exp1 = 0 时,后面的运算就不执行了
*举例*
int main()
{
int i = 0,a=0,b=2,c =3,d=4;
i = a++ && ++b && d++;
printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
return 0;
// a = 1 b = 2 c = 3 d = 4
}
|| 有一个为真则为真。
当几个 || 连用时,从左向右依次判断,若判断为真时,后面的运算就不执行了。
如:i = exp1 && exp2 && exp3 当exp1 != 0 时,后面的运算就不执行了
*举例*
int main()
{
int i = 0,a=0,b=2,c =3,d=4;
i = a++||++b||d++;
printf("a = %d\nb = %d\nc = %d\nd = %d\n", a, b, c, d);
// a = 1 b = 3 c =3 d = 4
return 0;
}
条件操作符
x = a>5 ?
3:
4
*举例*
int main()
{
int a = 5;
int b = 3;
int max = a>b?a:b;
printf ("max = %d\n",max);
// max = 5
return 0;
}
逗号表达式
exp1,exp2,exp3,...expN
从左向右依次执行,整个表达式的结果是最后一个表达式的结果
*举例*
int main()
{
int a = 1;
int b = 2;
int c = (a>b, a=b+10, a, b=a+1);
printf("c = %d\n", c); // c = 13
return 0;