操作符详解

本文详细介绍了C语言中的算术操作符,包括加减乘除和取模,强调了整数和浮点数的处理差异。接着讨论了移位操作符,如左移和右移,以及它们在二进制补码上的应用。位操作符如按位与、或、异或也得到了阐述。此外,还涵盖了赋值操作符、单目操作符如取反和自增/自减,以及关系和逻辑操作符的使用。最后提到了条件操作符和逗号表达式在表达式中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

算术操作符

移位操作符

位操作符

赋值操作符

单目操作符

关系操作符

逻辑操作符

条件操作符

逗号表达式 下标引用、函数调用和结构成员

算术操作符

算术操作符就是我们常见的加减乘除以及取模操作,+    -   *   /   %

+ - * 这三个运算符与我们平时所用的一样,不同的是 /运算符和 % 操作符

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

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

3. 对于 / 操作符如果两个操作数都为整数,执行整数除法。整数除法得到的结果也只会是整数;

想要得到浮点数,,除数两端必须要有其中一个为浮点数;例如:

5 / 2 = 2(整数除法只能得到整数) 5.0 / 2 = 2.5(两端有一个为浮点数)

移位操作符

<< 左移操作符

>> 右移操作符

在学习以为操作符需要先穿插一个知识点,二进制的原码反码补码,移位运算是在补码上进行的

  将一个整数转化成二进制数,计算出它对应的反码和补码

 

 << 左移操作符

移位规则: 左边抛弃、右边补0

>>右移操作符

移位规则:

首先右移运算分两种:

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

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

在绝大部分编译器下采用的都是算术移位

很多小伙伴可能也发现了,左移可以达到 *2的效果,而右移可以达到 /2的效果

 警告⚠ : 对于移位运算符,不要移动负数位,这个是标准未定义的。 例如:

int n = 5;

n>>-1 //error

位操作符

& //按位与

| //按位或

^ //按位异或

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

按位与&是将两个数的二进制位分别按位进行逻辑&运算(全1出1,有0出0)

例如

按位或 | 是将两个数的二进制位分别按位进行逻辑 | 运算(全0出0,有1出1)

按位异或 ^是将两个数的二进制位分别按位进行逻辑 ^ 运算(相同出0,不同出1)

赋值操作符

赋值操作符就是 = ,将操作符右边的值赋给操作符左边

值得注意的是各种复合赋值符

+=

-=

*=

/=

%=

>>=

<<=

&=

|=

^=

这些运算符都可以写成复合的效果。 比如:

int x = 10;

x = x+10;

x += 10;//复合赋值

两个表达式的结果相等

其他运算符一样的道理。这样写更加简洁。

单目操作符

单目操作符介绍

!           逻辑反操作(将加变为真,真变为假)

-           负值

+           正值

&           取地址

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

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

--          前置--(先--再使用)、后置--(先使用再--)

++          前置++(先++再使用)、后置++(先使用再++)

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

(类型)       强制类型转换

关系操作符

>

>=

<

<=

!=   用于测试“不相等”

==      用于测试“相等”

这些关系运算符比较简单,没什么可讲的,但是我们要注意一些运算符使用时候的陷阱。

例如: 在编程的过程中== 和=不小心写错,导致的错误。

逻辑操作符

&&     逻辑与 (两者都为真,结果为真,有一个为假,结果就是假)

||        逻辑或   (两者其中一个为真,结果就为真,两者都为假,结果为假)

例如:

//0为假,非0为真,真返回1,假返回0
int n = 1
int m = 0;
int k = 2;
n && m // 为假,结果返回0
n || m // 为真,结果返回1
n && k // 为真,结果返回1

条件操作符

用法:

exp1 ? exp2 : exp3

若exp1表达式为真,则则返回exp2的值,为假则返回exp3的值

类似于if else语句

例如:

int n = 2;
int m = 5;
(n > m) ? n : m ;
//若 n真的大于m 为真,则返回n的值 ,若n不大于m,则返回m的值

逗号表达式 下标引用、函数调用和结构成员

逗号表达式

exp1, exp2, exp3, …expN

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

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

例如:

int a = 1;

int b = 2;

int c = (a>b, a=b+10, a, b=a+1);

//c得到的值是 b = a+1的值13

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

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

int arr[10] = {0,1,2,3,4,5,6,7,8,9}l;
arr[4] = 9;
//arr和4是[]的两个操作数

2. ( ) 函数调用操作符 接受一个或者多个操作数:

第一个操作数是函数名,剩余的操作数就是传递给函数的参数

int add(int x , inty)
{
   return x + y;
}

add(2,5);
//add是()的第一个操作数,2,5是()的第二个操作数

 3. 访问一个结构的成员

. 结构体.成员名

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

struct node
{
   int x = 2;
   int y = 5;

};

node n;//创建结构体变量
node* p = &n;//创建结构体指针变量
int k = n.x;//访问结构体成员x
k = p->x;//访问结构体成员x

       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值