文章目录
1 算数操作符
加减乘除和取余操作,+ - * / %
2 移位操作符
左移 << 右移 >>
3 位操作符
-
想要用位运算,首先要把数字转化成2进制来理解怎么操作。
-
表示取反操作
& 表示与操作
| 或操作
^ 异或操作
3.1 &
判断奇偶数,因为位操作在判断时都是二进制,所以如果第0位是1的话,那么,就是奇数。
#include <stdio.h>
int odd_or_even(int num)
{
int a= num&1;
if ((num&1)==0)// 这里要注意num&1要加括号,==的优先级比 &要高
printf("这是偶数\n");
else
printf("这是奇数\n");
}
int main(){
int num=0;
printf("请输入数字?\n");
scanf("%d",&num);
odd_or_even(num);
}
3.2 ^异或
异或支持交换律和结合律,并且自己和自己异或=0,任何数和0异或等于自己。
应用1 :
int swap(int *a, int *b)
{
*a = *a^*b;//得到一个两者异或的值
*b = *a^*b;
*a = *a^*b;
printf("a = %d, b = %d\n",*a ,*b);
}
int main(){
int num=0;
//printf("请输入数字?\n");
//scanf("%d",&num);
//odd_or_even(num);
int a =10 , b= 20;
swap(&a,&b);
}
应用2:
所有数中只有一个出现了一次,其他都出现了两次。那么把所有数字都异或就可以找到这个数。
3.3 |
#define red 1
#define blue 2
#define color red|blue \\这里的color=3
4 赋值操作符
=
以及复合赋值符, +=等
5 单目运算符
- 逻辑反操作:!
- 负数操作:-,与负数对应的+
- 取地址操作:&
- 间接访问操作:*,和指针一起使用,用于访问指针所指向的值。
- sizeof操作符:用于得到操作数的类型长度,以字节单位。 sizeof(init) 或者不加括号 sizeof int都可以。
- 强制转换操作符:(类型),如果要对表达式进行转换,必须要把表达式括起来。
- 增值操作/减值操作:++/–,使用的时候看操作符在前还是后,如果在前那么先执行操作符,再赋值。赋值时都是复制一份变量值的拷贝,然后修改拷贝,原先的值时不变的。
6 关系运算符
= < <= != ==
7 逻辑操作符
|| 和 &&
先判断前面的表达式,如果前面不符合条件,那么后面的就不再判断,称为短路求值。
8 条件操作符
exp1 ? exp2: exp3//如果exp1为true那么执行exp2否则就执行exp3
9 逗号操作符
- ,
while(,)内部也可以执行多个表达式。当需要先执行一次那么就可以放到括号内。
10 下标引用/函数调用/结构成员
- 下标
array[下标]
*(array + 下标) - ->操作,在用指针访问时取代.来操作访问结构体内部变量或者函数。