- 算术操作符
取余操作符(%)的两个操作符必须为整数,返回整除后的余数 - 移位(二进制位)操作符
左移操作符 <<
右移操作符 >>
右移操作符的移位规则:
{
(1)、逻辑右移:左边用0填充,右边丢弃
(2)、算术右移:左边用原值的符号位填充,右边丢弃
}
移位操作符有求平均的功能
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a = 0;
int b = 0;
float ave = 0.0;
scanf("%d%d", &a, &b);
ave = (a + b) >> 1;
printf("ave = %lf", ave);
system("pause");
return 0;
}
- 位操作符
& 按位与
| 按位或
^ 按位异或
& 按位与操作符结合移位操作符可以实现计算一个数的二进制位中有多少个1
//方法一
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int count_one_bits(unsigned int m)
{
int count = 0;
int i = 0;
for (i = 0; i < 32; i++)
{
if (((m >> i) & 1) == 1)
{
count++;
}
}
return count;
}
int main()
{
int m = 0;
scanf("%d", &m);
int ret = 0;
ret = count_one_bits(m);
printf("%d\n", ret);
//方法二
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int count_one_bits(unsigned int m)
{
int count = 0;
while (m)
{
if (m % 2 == 1)
{
count++;
m = m / 2;
}
}
return count;
}
int main()
{
int num = 0;
int ret = 0;
scanf("%d", &num);
ret = count_one_bits(num);
printf("%d", ret);
system("pause");
return 0;
}
^ 按位异或可以在不创建临时变量的情况下交换两个数的内容
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int main()
{
int m = 0;
int n = 0;
scanf("%d%d", &m, &n);
m = m^n;
n = m^n;
m = m^n;
printf("m = %d n = %d\n", m, n);
system("pause");
return 0;
}
-
赋值操作符
+=
-=
*=
/=
%=
>>=
<<=
&=
|=
^= -
单目操作符
! 逻辑反操作符
-
+
&
sizeof操作数的类型长度(以字节为单位)
~ 对一个数的二进制按位取反
–
++
(类型)强制类型转化
…
部分单目操作符可以简化表达式
x++;
x--;
自增自减
int main()
{
int a = 2;
int x = 0;
int y = 0;
x = ++a;
y = --a;//a先自增(自减),再将a的值赋给x(或y)
x = a++;
y = a--;//先将a的值赋给x(或y),a再自增(自减)
return 0;
}
-
关系操作符
>
>=
<
<=
!=
== -
逻辑操作符
&&逻辑与
||逻辑或 -
条件操作符
exp1 ? exp2 : exp3
//上述表达式的意思是exp1为真,则执行 exp2, 否则执行 exp3 -
逗号表达式
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a = 1;
int b = 2;
int c = (a > b, a = b + 10, a, b = a + 1);
printf("%d", c);
system("pause");
return 0;
}
//计算时,从左往右执行,表达式的结果是最后一个表达式的结果,虽然表达式的结果是最后一个表达式的结果,但是它受前面表达式的影响
11.下标引、函数调用和结构成员
[ ]下标引用操作符
( )函数调用操作符
访问一个结构的成员
. 结构体.成员名
-> 结构体指针->成员名