C语言操作符详解(上),算数操作符,移位操作符,位操作符,赋值操作符

操作符分类:
算数操作符 移位操作符 位操作符 赋值操作符
单目操作符 关系操作符 逻辑操作符 条件操作符
逗号表达式 下标引用,函数调用和结构成员
算数操作符;+ - * / %
1.%,求模的时候不能模0,也不涉及浮点数的求模,只能针对整数求模,而其他的几个操作符可以作用与整数和浮点数.
2.对于/操作符如果两个操作数都为整数,就执行整数除法.而只要有浮点数,执行的就是浮点数除法.具体示例如下:

double	ret = 1 / 2;
printf("%d\n",ret);	//这样所得结果为0.000000

double	ret = 1 / 2.0;	//隐式类型转化,整型1隐式转换成double 1.0
double	ret = 1.0 / 2.0;
printf("%d\n",ret);	//这样所得结果为0.500000

double ret = (double) 1 / (double) 2;	//强制类型转换

3.这里我们还要注意在使用/操作符时,如果除数为0会怎样?比如下面的代码

int ret = 10 / 0;	//除以的是常量0,通常会在编译过程中出错

如果修改一下,变成下面这样:

int n = 0;
int ret = 10 / n;	//这样会在运行过程中出错

移位操作符
<< 左移操作符
>> 右移操作符
1.在使用移位操作符时,一定要注意是按二进制移位.
2.<<左移操作符是所有的二进制位全部往左移动一位,最左侧位就不要了,最右侧位补0.(左移1位相当于乘2)
3.>>右移操作符分为逻辑右移和算术右移两种.
(i)逻辑右移是所有二进制位往右移动一位,最右侧位就不要了,最左侧位补0;
(ii)算术右移,同样是所有二进制位往右移动一位,最右侧位就不要了,但是最左侧位要补符号位(用原该值的符号位填充,1表示负数,0表示正数),右移一位相当于除以2.
4.注意对于移位运算符,不要移动负数位,这是未定义行为.比如:

int num = 10;
num<<-1;

这是不对的.
位操作符
& 按位与
| 按位或
^ 按位异或
~ 按位取反
1.位操作符同样是按二进制位进行操作;
2.&,按位与:两个操作数都为1,结果为1,否则为0;
3.|,按位或:两个操作数都为0,结果为0,否则为1;
4^,按位异或:两个操作数相同则为0,相异为1;
5.~按位取反:每一位1变成0,0变成1.
看这样一个例子:

#include <stdio.h>
#include <stdlib.h>
int main() {
	int num1 = 1;
	int num2 = 2;
	printf("%d\n",num1 & num2);
	printf("%d\n",num1 | num2);
	printf("%d\n",num1 ^ num2);
	system("pause");
	return 0;
}

1的二进制数
0000 0000 0000 0000 0000 0000 0000 0001
2的二进制数
0000 0000 0000 0000 0000 0000 0000 0010

按位与(两个操作数都为1,结果为1,否则为0)
0000 0000 0000 0000 0000 0000 0000 0000
按位或(两个操作数都为0,结果为0,否则为1)
0000 0000 0000 0000 0000 0000 0000 0011 (3)
按位异或(两个操作数相同则为0,相异为1)
0000 0000 0000 0000 0000 0000 0000 0011 (3)
按位取反(每一位1变成0,0变成1)
1变为
1111 1111 1111 1111 1111 1111 1111 1110
2变为
1111 1111 1111 1111 1111 1111 1111 1101
赋值运算符
赋值运算符在我们的C语言中是一个非常好用的操作符,他可以帮你将之前得到的不满意的值存起来,当然也可以自己给他重新赋值.比如

int tall = 170;	//表示身高
tall = 190;	//对之前身高不满意就重新赋值

或者

double salary = 10000.0;	//表示薪水
salary = 20000.0;	//同样是利用赋值运算符重新赋值

要注意的是如果是下面这样就不可以重新赋值

const int num = 10;	//这个num是不可以重新赋值的

赋值运算符可以连续使用,比如:

int a = 10;
int x = 0;
int y = 20;
a = x = y + 1;	//连续赋值

等同于

x = y + 1;
a = x;

复合赋值符
+=
-=
*=
/=
%=
]>>=
<<=
&=
|=
^=
以上的这些运算符都可以写为复合的效果,比如:

int x = 10;
x = x + 10;
x += 10;

猜你喜欢

转载自blog.csdn.net/weixin_44781107/article/details/89232596
今日推荐