操作符详解

本文详细介绍了C语言中的各种操作符,包括算术操作符(如+,-,*,/,%),移位操作符(<<,>>),位操作符(&,|,^),赋值操作符,单目操作符(如!,-,+,&,sizeof,~,++,--),关系操作符,逻辑操作符,条件表达式以及逗号表达式。此外,还提到了下标引用,函数调用和结构成员访问的相关知识。
摘要由CSDN通过智能技术生成

目录

分类

1.算术操作符

2.移位操作符

2.1左移操作符: <<

2.2右移操作符

3.位操作符

3.1   & :按位与

3.2   |  :按位或

3.3   ^  :按位异或

4.赋值操作符

5.单目操作符

5.1简单介绍

5.2前置、后置 ++和 --

6.关系操作符

7.逻辑操作符

8.条件表达式

9.逗号表达式

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


分类

1.算术操作符

例如 :     加号:  +      减号:-    乘号:  *     除号:  /       取模: %

需注意几点:

1. 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。

2. 对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。

如:

#include<stdio.h>
int main()
{
	printf("%d\n", 10 / 3);
	printf("%f\n", 10 / 3.0);
	return 0;
}

3. % 操作符的两个操作数必须为整数。返回的是整除之后的余数。

2.移位操作符

左移操作符: <<

右移操作符:  >>

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

2.1左移操作符: <<

实际上移位操作符是对数值在内存上的二进制位进行操作的。

而在内存上的二进制位是数值的补码,对于正整数而言,源码、反码、补码是相同的。

对于负整数而言,源码,反码,补码是不同的。

负整数的反码:对比源码,除符号位不变,其余二进制位取反。

负整数的补码:反码+1。

下面请看图解:

 而左移操作符,就是移动这个32个二进制位。

如图:

2.2右移操作符

顾名思义,右移就是整体向右移动,不过要注意:

首先右移运算分两种:

1. 逻辑移位: 左边用0填充,右边丢弃

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

本小节最后警告一点:对于移位运算符,不要移动负数位,这个是标准未定义的!!!

3.位操作符

位操作符有:

& :按位与

|  :按位或

^  :按位异或

注:他们的操作数必须是整数。

3.1   & :按位与

规则:1&1 = 1,0&1 = 0,0&0 = 0, 1&0 =0

3.2   |  :按位或

规则:0 | 0 = 0,1 | 0 = 1,1 | 1 = 1, 0 | 1 =1

3.3   ^  :按位异或

规则:相同为 0 ,相异为 1

下面我们通过一个简单的例子来认识一下这三个位操作符:

如图:

4.赋值操作符

简单来说就是 = ;

比如给一个变量X赋值 5

int X=5;

 还有就是复合赋值:

+=;-=;/=;*=;%=;<<= ; >>= ; &= ; |= ; ^=

以 += 为例

就是:

int x =0;
x+=5;//相当于 x = x + 5

其余的同理。

5.单目操作符

5.1简单介绍

!           逻辑反操作(常常和 = 联用,!=表示不等于)

-           负值

+           正值

&           取地址

例如:

int a =10;
int *p =&a;//对a取地址放到指针变量 p 中

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

        sizeof,可以求变量(类型)所占空间的大小。

例如:

int a =10;
printf("%d\n",sizeof(a));//结果:4(整型数据占4个字节大小)
printf("%d\n",sizeof(int));//结果:4(整型数据占4个字节大小)

当然对于 变量来说这样写也可以:

printf("%d\n", sizeof a);

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

--          前置、后置--

++          前置、后置++

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

(类型)       强制类型转换

5.2前置、后置 ++和 --

前置和后置的区别在于:

前置:先运算,后使用

后置:先使用,后运算

什么意思呢?让我们来看例图:

6.关系操作符

> ; < ; ==(表示相等) ; !=(不相等) ;>= ; <=

相信数学大家都会,这里基本一致,就不过多叙述了。

不过注意一点:不要把 = (赋值) 和 == (相等)搞混!

7.逻辑操作符

&&       逻辑与

||          逻辑或

需要注意的是:逻辑与按位与、逻辑或与按位或的区别!逻辑注重的是真假。

例如:

1&2----->0

1&&2---->1

1|2----->3

1||2---->1

8.条件表达式

格式:exp1 ? exp2 : exp3 (条件1成立,输出条件2的结果;条件1不成立,输出条件3的结果)

例:

int r = 5>8 ? 6 : 8;
printf("%d",r);//输出结果: r = 8(因为5>8不成立)

就相当于:

int r =0;
if(5>8)
    r=6;
else
    r=8;

9.逗号表达式

格式:exp1, exp2, exp3, …expN

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

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

例:

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

10.1. [ ] 下标引用操作符

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

 

10.2. ( ) 函数调用操作符

接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。

例如:

10.3. 访问一个结构的成员

.           结构体.成员名

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

如图:

 完结

最后欢迎大家指正评论,另外请不要您手中的赞,谢谢收看!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值