首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >C语言: 操作符详解

C语言: 操作符详解

作者头像
青衫哥
发布2023-03-31 09:01:40
发布2023-03-31 09:01:40
5870
举报
文章被收录于专栏:C++打怪之路C++打怪之路

目录

操作符主要分为:

1、算术操作符

2、移位操作符

3、位操作符

4、赋值操作符

 5、单目操作符

 6、关系操作符

7、逻辑操作符

8、条件操作符

9、逗号表达式

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


操作符主要分为:

算术操作符

移位操作符

位操作符

赋值操作符

单目操作符

关系操作符

逻辑操作符

条件操作符

逗号表达式

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

1、算术操作符

+    -    *    /    %

加 减   乘  除  取余

用法:

1、除了%之外,其他几个操作符能用作整数和浮点数。%只能用于整数

2、对于/操作符,如果两个操作数都是整数,那就是整数运算。如果有浮点数,那就是进行浮点数除法。

3、%得到的是整除之后的余数。 例如:5%2的值为1。

2、移位操作符

<< 左移操作符           >>  右移操作符

左移操作符的移位规则:左边的抛弃、右边的空位由0补足。

 右移操作符的移位规则分为两种:

1、逻辑移位:左边空位用0补足,右边的直接丢弃。

2、算术移位:左边用符号补足,右边的直接丢弃。

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

3、位操作符

&  --按位与        |  --按位或    ^  --按位异或

按位与是两个二进制代码如果对应位上的数字都为1,那么得1,否就得0。

按位或是两个二进制代码如果对应位上的数字有一个为1,那么得1,否则得0。

按位异或是两个二进制代码如果互不相同,那么得1,否则得0。

 这道题中b最后和a的数值是互换了,因为a^a^b=b , b^b^a=a。两个相同的数字异或是0

4、赋值操作符

我们通常用=号来给变量赋值。

复合赋值符:

+=

-=

*=

/=

%=

>>=

<<=

&=

|=

^=

 5、单目操作符

!           逻辑反操作

-           负值

+           正值

&           取地址

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

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

--          前置、后置--

++          前置、后置++

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

(类型)       强制类型转换

值得一提的是,++和--符分为前置和后置,前置是先使用后操作,后置是先操作后使用。

例如:

代码语言:javascript
复制
int a=10;
int b=a++;
printf("%d %d\n",a,b);

这其中打印的b的值为10,而a为11

就是因为在先使用了a赋值给b再实现自增。

强制类型转换()的使用方法:

这样得到的a是3

 6、关系操作符

>

>=

<

<=

!= 用于测试“不相等

== 用于测试“相等

注意:很多人在比较的时候容易将“==”打成“=”,这样就由比较变成赋值了,是一个比较容易犯的错误。

7、逻辑操作符

&&  --逻辑与                 ||  --逻辑或           

360曾经的一道笔试题

输出的结果是1  2 3 4和 1 3 3 4

因为逻辑与在从左向右判断的时候碰到假项后就不再执行。

逻辑后则是再判断的时候碰到真项之后就不再判断。              

8、条件操作符

exp1 ? exp2 : exp3

如果表达式1成立那么实现表达式2,否则实现表达式3。

9、逗号表达式

exp1, exp2, exp3, …expN

从左向右执行

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

1、下标引用操作符 [ ]

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

代码语言:javascript
复制
int arr[10];//创建数组
 arr[9] = 10;//实用下标引用操作符。
 [ ]的两个操作数是arr和9。

数组名传的是第一个下标,所以

上面两行打印效果相同,都是打印了同一个地址

 上面的效果也相同,都是打印了同一个元素。

函数操作符()

在函数名之后

代码语言:javascript
复制
#include <stdio.h>
 void test1()
 {
 printf("hehe\n");
 }
 void test2(const char *str)
 {
 printf("%s\n", str);
 }
 int main()
 {
 test1();            //实用()作为函数调用操作符。
 test2("hello bit.");//实用()作为函数调用操作符。
 return 0;
 }

结构成员访问

. 结构体.成员名

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

代码语言:javascript
复制
#include <stdio.h>
struct Stu
{
 char name[10];
 int age;
 char sex[5];
 double score; };
void set_age1(struct Stu stu) {
 stu.age = 18; }
void set_age2(struct Stu* pStu) {
 pStu->age = 18;//结构成员访问
}
int main()
{
 struct Stu stu;
 struct Stu* pStu = &stu;//结构成员访问
 
 stu.age = 20;//结构成员访问
 set_age1(stu);
 
 pStu->age = 20;//结构成员访问
 set_age2(pStu);
 return 0; }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 操作符主要分为:
  • 1、算术操作符
  • 2、移位操作符
  • 3、位操作符
  • 4、赋值操作符
  •  5、单目操作符
  •  6、关系操作符
  • 7、逻辑操作符
  • 8、条件操作符
  • 9、逗号表达式
  • 10、下表引用、函数调用和结构成员
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档