C语言操作符汇总


1.算术操作符
运算符介绍
+加法运算
-减法运算
*乘法运算
/除法运算,整型相除结果还是整型,有一个是浮点型结果就是浮点型
%取模(求余)运算,两个操作数必须都是整型,返回结果是余数

2.移位操作符
运算符介绍
<<左移运算符,左边抛弃、右边补0
>>右移运算符,移位规则和编译环境有关,分为逻辑移位和算术移位

逻辑移位:右边抛弃,左边补0
算术移位:右边抛弃,左边补符号位

注意:移位运算符是对内存中的补码进行移位,只能用于整型(因为只有整型是使用补码形式存储,浮点数在内存中是以符号+指数+尾数存储的)

左移一位有乘2的效果,二进制数全部向左移了一位,每一位的权重是原来的二倍,同理右移一位有除以2的效果。

对了,还有个要强调的点:移位运算符并不改变变量原先的值,整个表达式的结果才是移位后的结果!
举个栗子:

int a = 1;
int b = 0;
b = a << 1;

运算之后a的值还是1哦,b的值才是a移位后的结果。


3.位操作符
操作符介绍
&按位与,有0则结果为0
按位或,有1则结果为1
^按位异或,相同为0,相异为1

注意:位操作也是对补码进行操作的,和移位运算符相同,也只能用于整型
几个有趣的位运算:
a & a = ?
a | 0 = ?
a ^ 0 = ?
a ^ a = ?

a&a=a; 对应位都是相同的,结果还是本身
a | 0=a;这个没啥好说的吧,反正觉得或操作符很大方
a^0 =a;是0的位结果还是0,是1的位结果还是1
a^a = 0;相同为0,对应位全都相同,结果为0


4.赋值操作符

= 和汇编中的MOV有异曲同工之妙!

复合赋值符
+=
-=
*=
/=
%=
>>=
&=
|=
^=
简洁好用!


5.单目操作符
操作符介绍
!逻辑反操作
-负值
+正值
&取地址
sizeof操作数的类型长度(以字节为单位)
~对一个数的二进制按位取反
前置、后置- -
++前置、后置++
*间接访问操作符(解引用操作符)
(类型)强制类型转换
! 逻辑反操作 和 ~ 按位取反

逻辑 反操作,表达式的逻辑值(真值)有两种情况:真和假
!操作符用于对真值取反,把真的变成假的,假的变成真的
而~ 按位 取反的结果数的位数不变,每一位进行取反

&取地址符

常见场景:

int a;
int *p=&a;
scanf("%d",&a);

数组名本身就是一个地址,代表的是数组首元素的地址
对数组名取地址,得到的是整个数组的地址

#include<stdio.h>
int main()
{
    int arr[10];
    printf("%p\n", &arr);
    printf("%p\n", arr);
    return 0;
}

运行结果:
002CFA90
002CFA90
请按任意键继续…

看起来好像一样,但其实是有区别的:

#include<stdio.h>
int main()
{
    int arr[10];
    printf("%p\n", &arr);
    printf("%p\n\n", &arr+1);

    printf("%p\n", arr);
    printf("%p\n", arr+1);
    return 0;
}

运行结果:
0044FD50
0044FD78

0044FD50
0044FD54
请按任意键继续…

(arr+1)-arr=4;
(&arr+1)-&arr=40;
可见arr+1时只加了一个数组元素的大小,而&arr+1时则加了整个数组元素的大小

sizeof

sizeof操作符是用来求变量或者类型的大小的,它还是C语言32个关键字之一,但绝对绝对不是函数
最直接的证据就是sizeof在测变量的大小时,圆括号可以省略:

sizeof(a)
sizeof a
这两种表示是相同的,但是求类型的大小时必须要有圆括号

划个重点:
sizeof(数组名)——数组名表示整个数组,计算的是整个数组的大小
&数组名——数组名表示整个数组,取出的是整个数组的大小
除此之外,所有的数组名都表示数组首元素地址

还有,sizeof内部的表达式不计算,原因是sizeof是在编译时进行的,而变量在运行时才被创建,所以sizeof计算变量的大小时也只是看看类型,不管具体的值。

++、- -

这个应该都知道,前置++、- -是先自增自减再运算,后置的是先运算再自增减

a++ <=> (int temp = a, a = a + 1,temp)
++a <=>a = a + 1;

6.关系操作符
操作符介绍
>大于
>=大于等于
<小于
<=小于等于
!=不等于
==等于

注意等于与赋值区分,非常容易犯的小错误,还不容易查错
所以判断相等时把常数写在左边,像这样

if(5 == a)

不小心写成赋值编译器也能检查出来,因为常数不能被赋值~

7.逻辑操作符
操作符介绍
&&逻辑与,同真为真,有假为假
丨丨逻辑或,有真为真
~逻辑非

注意:&&在遇到假时就不再继续判断了,因为结果注定是假了,同理,||在遇到真时也不继续判断

8.条件操作符

(exp1)?(exp2):(exp3)

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

等同于

b = a>5?3:-3;

简单,好用~

9.逗号表达式

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

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

1.[ ]
操作数:一个数组名+一个索引值

2.( )
第一个操作数是函数名,剩余的操作数就是传递给函数的参数。

3.访问一个结构的成员

操作符介绍
.结构体.成员名
->结构体指针->成员名比特
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值