C语言操作符总结
目录
* 1.操作符的分类
* 2.表达式求值
一.操作符的分类
1、算数操作符
除以一个变量,该变量的值为0,会导致运行时出错。
除以一个常量0,编译器就会编译错误。
2、移位操作符
计算机上的信息都是按照二进制存储的,左移<<2相当于*2(左侧丢弃,右侧补0),右移>>2分为逻辑右移:左侧补0和算术右移:左侧补符号位(相当于/2),右移大多都是算术右移。
左移n位:*2^n
3、位操作符
&:按位与,有0则0
|:按位或,有1则1
^:按位异或,同0异1
~:按位取反,01互换
不创建临时变量,实现两个数的交换
#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;
}
一个整数存储在内存中的二进制中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;
}
4、赋值操作符
初始化和赋值不同,常量可以赋值但不能初始化,数组可以用{}进行初始化,但不能用{}进行赋值
描述格式化字符串时需要有三个部分,几进制,有无符号,整数/浮点数
eg:%d:十进制 有符号 整数,%x:十六进制 无符号 整数
5、单目操作符
sizeof不是函数,而是一个操作符,表示操作数的类型长度(以字节为单位),可求变量(类型)所占空间的大小。
sizeof编译时直接求值,没有涉及到内存访问,所以int arr[10]中sizeof(arr[10])=4
如果不取表达式的值,前置和后置是等价的,如果取值的话,前置++返回的是自增之后的值,后置++返回的是自增之前的值。
++num:
num += 1;
return num;
num++:
int tmp = num;
num += 1;
return tmp;
后置++需要引入一个临时变量,所以前置++效率更高。
6、关系操作符
所有关系操作符的结果只有两个:0或1.
7、逻辑操作符
在C语言中可以使用宏来定义逻辑操作符。
#define and &&
#define or ||