算数操作符
+ - * / %
注意 / 操作符在有浮点数时的计算结果
int main()
{
float f1 = 7 / 2;
float f2 = (float)7 / 2;
float f3 = 7 / (float)2;
float f4 = (float)(7 / 2);
printf("%f\n", f1);
printf("%f\n", f2);
printf("%f\n", f3);
printf("%f\n", f4);
system("pause");
return 0;
}
输出结果如下:
注意 % 操作符的两个操作数必须为整数
int main()
{
int a = -1;
//printf("%d\n", a);
printf("%d\n", -10 % 3);
printf("%d\n", 10 % -3);
printf("%d\n", -10 % -3);
printf("%d\n", 10 % 3);
system("pause");
return 0;
}
输出结果如下:
移位操作符
<< 左移操作符
>> 右移操作符
左移操作符——左边抛弃、右边补0
右移操作符
- 逻辑移位 左边用0填充,右边丢弃
- 算术移位 左边用原该值的符号位填充,右边丢弃
位操作符
& 按位与
| 按位或
^ 按位异或 ——相同取0,相异取1
位操作符应用——求一个整数存储在内存中的二进制中1的个数
#include <stdio.h>
int main()
{
int num = -1;
int i = 0;
int count = 0;//计数
while(num)
{
count++;
num = num&(num-1);
}
printf("二进制中1的个数 = %d\n",count);
return 0;
}
num = num&(num-1);
用来求二进制位有几个1
赋值操作符
=
复合赋值符
+=
-=
*=
/=
%=
>>=
<<=
&=
|=
^=
单目操作符
! // 逻辑反操作
- //负值
+ //正值
& //取地址
sizeof //操作数的类型长度(以字节为单位)
~ //对一个数的二进制按位取反
-- //前置、后置--
++ //前置、后置++
* //间接访问操作符(解引用操作符)
(类型) //强制类型转换
注意sizeof在编译期间只确定类型大小,不参与运算
int main()
{
int arr[10] = {0};
int a = -1;
printf("%d\n",sizeof(a++));
printf("%d\n", a);
system("pause");
return 0;
}
输出结果a还是-1
关系操作符
>
>=
<
<=
!= //用于测试“不相等”
== //用于测试“相等”
逻辑操作符
&& 逻辑与
|| 逻辑或
表达式1 && 表达式2 && 表达式3
表达式1为真再执行表达式2,否则不执行
表达式1和表达式2都为真,则执行表达式3,否则不执行
int main()
{
int i = 0;
int a = 1;
int b = 0;
int c = 2;
i = a++ && b++ && c++;
printf("%d %d %d", a, b, c);
system("pause");
return 0;