C语言——操作符详解

一、操作符分类

算术操作符

移位操作符

位操作符

赋值操作符

单目操作符

关系操作符

逻辑操作符

条件操作符

逗号表达式

下标引用、函数调用和结构成员

二、算数操作符

+  -  *  /  %

三、移位操作符

<<   左移操作符:左边丢弃,右边补0

>>  右移操作符:分为两种:1.逻辑移位 左边用0补充,右边丢弃 

                                              2.算数移位  左边用该原值符号填充,右边丢弃

注:移位操作符的操作数只能是整数

四、位操作符

1.&   按二级制位与

比如:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>

int main()
{
	int a = 3;
	int b = -5;
	int c = a & b;
	printf("c=%d\n", c);
	return 0;
}

在上述代码中,c的结果是3,怎么得来的呢?

先写出a(3)和b(-5)的补码

00000000000000000000000000000011         3的补码

10000000000000000000000000000101        -5的原码

11111111111111111111111111111010                -5的反码

11111111111111111111111111111011                -5的补码

然后看3的补码和-5的补码:

11111111111111111111111111111011                -5的补码

00000000000000000000000000000011         3的补码

进行按位与,如果有0,就是0;如果同时为1,才为1,结果如下:

00000000000000000000000000000011      补码 ,放内存里放的是补码,正数的正反补码一样,所以结果为3

2.|   按二级制位或

同上,写出a(3)和b(-5)的补码

11111111111111111111111111111011                -5的补码

00000000000000000000000000000011         3的补码

进行按位或,如果有1,则为1;同时为0,才为0

11111111111111111111111111111011     这是补码

11111111111111111111111111111010     这是反码

1000000000000000000000000000101    这是原码,结果为-5

3.^   按二级制位异或

同上,写出a(3)和b(-5)的补码

11111111111111111111111111111011                -5的补码

00000000000000000000000000000011         3的补码

进行按位异或,相同为0,相异为1

11111111111111111111111111111000    这是补码

11111111111111111111111111110111    这是反码

10000000000000001000000000001000    这是源码  结果为-8

 一道面试题,不能创建临时变量(第三个变量),实现两个数的交换

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>

int main()
{
	int a = 2;
	int b = 3;
	printf("交换前:a=%d,b=%d\n", a, b);
	a = a ^ b;
	b = a ^ b;
	a = a ^ b;
	printf("交换后:a=%d,b=%d\n", a, b);
	return 0;
}

五、赋值操作符

=

复合赋值符

+=        a=a+5   a+=5

-=

*=

...

六、单目操作符

单目操作符只有一个操作数

! 逻辑反操作

- 负值

+ 正值

& 取地址

sizeof 操作数的类型长度(以字节为单位)

~ 对一个数的二进制按位取反

-- 前置后置--

++ 前置后置++

* 间接访问操作符(解引用操作符)

(类型) 强制类型转换

七、关系操作符

>

>=

<

<=

!=    测试不相等

==    测试相等

两个字符串比较相等应该用strcmp库函数比较

八、逻辑操作符

&& 逻辑与  左边为假,右边就不用算了

||  逻辑或   左边为真,右边就不用算了

一道面试题:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>

//360面试题
int main()
{
	int i = 0, a = 0, b = 2, c = 3, d = 4;
	i = a++ && ++b && d++;
	//i=a++||++b||d++;

	printf("a=%d\nb=%d\nc=%d\nd=%d\n", a, b, c, d);
	return 0;
}

结果为什么是1,2,3,4呢?不懂的可以私信我哦!!!

九、条件操作符(三目操作符)

表达式1?表达式2:表达式3

真前假后,表达式为真,算表达式2;表达式为假,算表达式3

练习题:

1.

if(a>5)
     b=3;
else
     b=-3;

转换成表达式是什么样的?

(a>5)?(a=3):(a=-3);

b=(a>5?3:5);

2.使用条件表达式实现找两个数的最大值

int max=(a>b?a:b);

十、逗号表达式

exp1,exp2,exp3,...expN

逗号表达式,就是用逗号隔开的多个表达式

逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。

十一、下标引用、函数调用和结构成员

1.[ ]下标引用操作符

操作数:一个数组名+一个索引值

2.( )函数调用操作符

3.访问一个结构的成员

 .   结构体.成员名

->   结构体指针->成员名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值