这是一篇整理C操作符的博客,将C中最常见的字符进行了归纳汇总,对各种字符的作用做了一些理解性的阐述;
一、算术操作符
+ 加操作符
将左右两个操作数相加;
- 减操作符
将左操作数减去右操作数;
* 乘操作符
将左右两个操作数相乘;
/ 除操作符
将左操作数除以右操作数,左右操作数若都为整数,则计算结果无小数,左右操作数中若有一个浮点数,则计算结果为浮点数; 例如:
float a = 3 / 2;
float b = 3.0 / 2;
float c = 3 / 2.0;
上式中,a值为1,b、c值都为1.5;
% 取模操作符
左右操作数必须都为整型,将左操作数除以右操作数得到的余数即为取模的结果。
二、移位操作符
整数在内存中以补码存储,相关内容可见--->原码、反码以及补码
>> 左移操作符
二进制表示左边丢弃,右边补0;
>> 右移操作符
- 算术右移:二进制表示右边丢弃,左边补原符号位;
- 逻辑右移:二进制表示右边丢弃,左边补0;
三、位操作符
注意:位操作符的操作数必须位整数
& 按位与
对应的二进制位都为1取1,否则取0;
注意:此时为双目操作符(a&b);而取地址(&a)为单目操作符。
//按位与的应用
//求一个整数存储在内存中的二进制中1的个数
#include<stdio.h>
int main()
{
int a = 0;
scanf("%d", &a);
int count = 0;
for (int i = 0; i < 32; i++)
{
if (1 == ((a >> i) & 1))
{
count++;
}
}
printf("%d", count);
return 0;
}
| 按位或
对应的二进制位有1位为1则取1,都为0则取0;
^ 按位异或
对应的二进制位相同取0,相异取1;
//异或的一个特殊用法
#include<stdio.h>
//不创建变量完成两个变量的数值交换
// 原理:归零律:a ^ a = 0
// 恒等律:a ^ 0 = a
// 交换律:a ^ b = b ^ a
// 结合律:a ^ b ^ c =(a ^ b) ^ c = a ^ (b ^ c)
int main()
{
int a = 1;
int b = 2;
a = a ^ b;
b = a ^ b;//b = (a ^ b) ^ b = a ^ b ^ b = a ^ (b ^ b) = a ^ 0 = a;
a = a ^ b;//a = a ^ b ^ a = b ^ 0;
printf("a = %d, b = %d\n", a, b);
return 0;
}
四、赋值操作符
通过上述三类操作符可以构成复合赋值符,使代码更简洁
例如:
int a = 0;
a += 1;//等价于 a = a + 1;
五、单目操作符
- ! 逻辑反操作
- - 负值
- + 正值
- & 取地址
- sizeof 操作数的类型长度(以字节为单位)
注:sizeof操作符()中的表达式不参与运算,原因是sizeof是在编译期间处理的,所以当程序运行时,不会执行()中的表达式;
- ~ 对一个数的二进制按位取反
- -- 前置、后置--
- ++ 前置、后置++
- * 间接访问操作符(解引用操作符)
- (类型) 强制类型转换
六、逻辑操作符
- && 逻辑与 双目操作符,左右条件均满足则为真,否则为假;
- || 逻辑或 左右条件有一条满足则为真,都为假才为假;
七、条件操作符
? : 三目操作符
实例:
#include<stdio.h>
int main()
{
int a = 0;
scanf("%d", &a);
a = a > 0 ? 1 : 0;//a大于0,a = 1; 否则 a = 0;
printf("%d", a);
}