c语言---操作符(详解)

目录

  • 一、操作符的分类
  • 二、算术操作符
  • 三、 移位操作符
    • 3.1<<左移操作符
      • 3.1.1移位规则
      • 3.1.2直接上代码以及解释
    • 3.2>> 右移操作符
      • 3.2.1移位规则
      • 3.2.2画图解释
    • 3.3注意
  • 四、位操作符:&、|、^、~
    • 4.1&按位与
      • 4.1.1按位与的计算逻辑
      • 4.1.2代码
      • 4.1.3运行结果
      • 4.1.4 画图解释
    • 4.2 按位或(|)
      • 4.2.1按位或的计算逻辑
      • 4.2.2 代码
      • 4.2.3运行结果
      • 4.2.4画图解释
    • 4.3按位异或(^)
      • 4.3.1按位异或计算逻辑
      • 4.3.2代码
      • 4.3.3 运算结果
      • 4.3.4画图解释
    • 4.4按位取反(~)
      • 4.4.1按位取反计算逻辑
      • 4.4.2代码
      • 4.4.3运行结果
      • 4.4.4画图分析
  • 五、单目操作符
        • !、++、--、&、*、+、-、~ 、(类型)
  • 六、逗号表达式
    • 6.1形式
    • 6.2特点
    • 6.3代码
    • 6.4运行结果
    • 6.5画图解释
  • 七、 下标访问[]、函数调用()
    • 7.1下标访问[]操作符
    • 7.2函数调用操作符
  • 八、结构成员访问操作符
    • 8.1结构体
      • 8.1.1结构的声明
      • 8.1.2结构体变量的定义和初始化
      • 8.1.3 结构体成员的直接访问
        • 8.1.3.1代码1
        • 8.1.3.1.1代码1运行结果
        • 8.1.3.2代码2
        • 8.1.3.2.2代码2运行结果
      • 8.1.4接构体成员的间接访问
        • 8.1.4.1代码
        • 8.1.4.1.1代码运行结果:
  • 九、 操作符的属性:优先级、结合性
    • 9.1优先级
    • 9.2结合性
    • 9.3注意
  • 十、 总结

一、操作符的分类

算术操作符: + 、- 、*、/ 、%
移位操作符: << >>
位操作符: & | ^ `
赋值操作符: = 、+= 、 -= 、 = 、 /= 、%= 、<<= 、>>= 、&= 、|= 、^=
单⽬操作符: !、++、–、&、
、+、-、~ 、sizeof、(类型)
关系操作符: > 、>= 、< 、<= 、 == 、 !=
逻辑操作符: && 、||
条件操作符: ? :
逗号表达式: ,
下标引⽤: []
函数调⽤: ()
结构成员访问: . 、->

二、算术操作符

在这里插入图片描述

三、 移位操作符

3.1<<左移操作符

3.1.1移位规则

左边抛弃,右边补0。

3.1.2直接上代码以及解释

#include<stdio.h>
int main()
{
	int a = 6;
	int b = a << 1;
	printf("%d\n", a);
	printf("%d\n", b);
	return 0;
}

运行结果:
在这里插入图片描述
数据存放内存中其实存放的是补码。
在这里插入图片描述
如果改成a=-6,那么结果如何呢?
直接上代码:

#include<stdio.h>
int main()
{
	int a = -6;
	int b = a << 1;
	printf("%d\n", a);
	printf("%d\n", b);
	return 0;
}

运行结果:
在这里插入图片描述
在这里插入图片描述

3.2>> 右移操作符

3.2.1移位规则

首先右移运算分两种:
1.逻辑右移:左边用0填充,右边丢弃。
2.算术右移:左边用原该值的符号位填充,右边丢弃。
其次右移到底是算术右移,还是逻辑右移取决于编译器的实现,常见的编译器都是算术右移。

3.2.2画图解释

在这里插入图片描述

3.3注意

1.移位操作符的操作数只能是整数,移动的是二进制。
2.不要移动负数位,这是未定义的,例如:

int num = 10;
num>>-1;//error

四、位操作符:&、|、^、~

操作的是二进制位。

& //按位与
|//按位或
^//按位异或
~//按位取反

4.1&按位与

4.1.1按位与的计算逻辑

相同为1,不同为0。

4.1.2代码

#include<stdio.h>
int main()
{
	int a = 3;
	int b = -5;
	int c = a & b;
	printf("%d\n", c);
	return 0;
}

4.1.3运行结果

在这里插入图片描述

4.1.4 画图解释

在这里插入图片描述

4.2 按位或(|)

4.2.1按位或的计算逻辑

两个同时为0,才为0

4.2.2 代码

#include<stdio.h>
int main()
{
	int a = 3;
	int b = -5;
	int c = a |b;
	printf("%d\n", c);
	return 0;
}

4.2.3运行结果

在这里插入图片描述

4.2.4画图解释

在这里插入图片描述

4.3按位异或(^)

4.3.1按位异或计算逻辑

相同为0,相异为1。

4.3.2代码

#include<stdio.h>
int main()
{
	int a = 3;
	int b = -5;
	int c = a ^b;
	printf("%d\n", c);
	return 0;
}

4.3.3 运算结果

在这里插入图片描述

4.3.4画图解释

在这里插入图片描述

4.4按位取反(~)

4.4.1按位取反计算逻辑

所有位按位取反

4.4.2代码

#include<stdio.h>
int main()
{
	int a = 0;
	int b= ~a;
	printf("%d\n", b);
	return 0;
}

4.4.3运行结果

在这里插入图片描述

4.4.4画图分析

在这里插入图片描述

五、单目操作符

!、++、–、&、*、+、-、~ 、(类型)

在这里插入图片描述
如上图标黄色的,先参与运算,再加或减。
如上图标红色的,先加或减,再运算。
在这里插入图片描述

六、逗号表达式

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

6.1形式

exp1, exp2, exp3, …expN

6.2特点

从左往右依次计算,取最右边的结果为表达式最后的结果。

6.3代码

#include<stdio.h>
int main()
{
	int a = 1;
	int b = 2;
	int c = (a > b, a = b + 10, a, b = a + 1);
		printf("%d", c);
	return 0;
}

6.4运行结果

在这里插入图片描述

6.5画图解释

在这里插入图片描述

七、 下标访问[]、函数调用()

7.1下标访问[]操作符

#include<stdio.h>
int main()
{
	int arr[] = { 1,2,3,4,5 };
		printf("%d", arr[2]);//这里的[]就是下标访问操作符
	return 0;
}

7.2函数调用操作符

在这里插入图片描述

八、结构成员访问操作符

8.1结构体

c语⾔已经提供了内置类型,如:char、short、int、long、float、double等,但是只有这些内置类型还是不够的,假设我想描述学⽣,描述⼀本书,这时单⼀的内置类型是不⾏的。描述⼀个学⽣需要名字、年龄、学号、⾝⾼、体重等;描述⼀本书需要作者、出版社、定价等。C语⾔为了解决这个问题,增加了结构体这种⾃定义的数据类型,让程序员可以⾃⼰创造适合的类型。结构是⼀些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量,如:标量、数组、指针,甚⾄是其他结构体。

8.1.1结构的声明

创造一个新的类型

struct tag
{
 member-list;
}variable-list;

描述一个学生:

struct Stu
{
 char name[20];//名字
 int age;//年龄
 char sex[5];//性别
 char id[20];//学号
}s4,s5,s6; //分号不能丢
//s4,s5,s6是结构体变量(全局的)
struct Stu s7;//也是全局的
int main()
{
 struct Stu s1;
 struct Stu s2;
 struct Stu s3;
 //s1,s2,s3这三个结构体变量(局部的)
 return 0}

8.1.2结构体变量的定义和初始化

struct Stu
{
	char name[20];//名字
	int age;//年龄
	char sex[5];//性别
	char id[20];//学号
}s4, s5, s6; //分号不能丢
//s4,s5,s6是结构体变量(全局的)
struct Stu s7;//也是全局的
int main()
{
	struct Stu s1 = { "张三",20,"男","20231234" };//初始化
	struct Stu s2={.age=30,.name="Lina", .sex="男",.id="1008611"};//指定顺序初始化
	struct Stu s3;
	//s1,s2,s3这三个结构体变量(局部的)
	return 0;
}

再看一个初始化

#include<stdio.h>

struct S
{
	char c;
	int n;
};
struct B
{
	struct S s;
	int* p;
	char arr[10];
	float sc;
};
int main()
{
	struct B b = { {'A',60},NULL,"权权",66.6f };//初始化b
	return 0;
}

8.1.3 结构体成员的直接访问

使用方式:结构体变量.成员名

8.1.3.1代码1
#include<stdio.h>
struct Stu
{
	char name[20];//名字
	int age;//年龄
	char sex[5];//性别
	char id[20];//学号
}s4, s5, s6; //分号不能丢
//s4,s5,s6是结构体变量(全局的)
struct Stu s7;//也是全局的
int main()
{
	struct Stu s1 = { "张三",20,"男","20231234" };//初始化
	struct Stu s2={.age=30,.name="Lina", .sex="男",.id="1008611"};//指定顺序初始化
	struct Stu s3;
	//s1,s2,s3这三个结构体变量(局部的)
	printf("%s %d %s %s", s1.name, s1.age, s1.sex, s1.id);
	return 0;
}
8.1.3.1.1代码1运行结果

在这里插入图片描述

8.1.3.2代码2
#include<stdio.h>
struct S
{
	char c;
	int n;
};
struct B
{
	struct S s;
	int* p;
	char arr[10];
	float sc;
};
int main()
{
	struct B b = { {'A',60},NULL,"权权",66.6f };
	printf("%c\n", b.s.c);
	return 0;
}
8.1.3.2.2代码2运行结果

在这里插入图片描述

8.1.4接构体成员的间接访问

使用方法:结构体指针->成员名
有时候我们得到的不是⼀个结构体变量,⽽是得到了⼀个指向结构体的指针。如下所示:

8.1.4.1代码
#include<stdio.h>
struct Point
{
	int x;
	int y;
};
int main()
{
	struct Point p = { 3, 4 };
	struct Point* ptr = &p;
	ptr->x = 10;
	ptr->y = 20;
	printf("x = %d y = %d\n", ptr->x, ptr->y);
	return 0;
}
8.1.4.1.1代码运行结果:

在这里插入图片描述

九、 操作符的属性:优先级、结合性

C语⾔的操作符有2个重要的属性:优先级、结合性,这两个属性决定了表达式求值的计算顺序。

9.1优先级

优先级指的是,如果⼀个表达式包含多个运算符,哪个运算符应该优先执⾏。各种运算符的优先级是不⼀样的。

 3 + 4 * 5;

上面示例中,表达式 3 + 4 * 5 里面既有加法运算符( + ),又有乘法运算符( * )。由于乘法的优先级高于加法,所以会先计算 4 * 5 ,而不是先计算 3 + 4 。

9.2结合性

如果两个运算符优先级相同,优先级没办法确定先计算哪个了,这时候就看结合性了,则根据运算符是左结合,还是右结合,决定执⾏顺序。⼤部分运算符是左结合(从左到右执行),少数运算符是右结合(从右到左执行),比如赋值运算符( = )。

 5* 6 / 2;

上面示例中, * 和 / 的优先级相同,它们都是左结合运算符,所以从左到右执行,先计算 5 * 6 ,再计算 6 / 2 。
运算符的优先级顺序很多,下面是部分运算符的优先级顺序(按照优先级从⾼到低排列),建议大概记住这些操作符的优先级就行,其他操作符在使用的时候查看下面表格就可以了。
• 圆括号( () )
• 自增运算符( ++ ),⾃减运算符( – )
• 单⽬运算符( + 和 - )
• 乘法( * ),除法( / )
• 加法( + ),减法( - )
• 关系运算符( < 、 > 等)
• 赋值运算符( = )
由于圆括号的优先级最⾼,可以使用他改变其他运算符的优先级。
下表列出 C 运算符的优先级和结合性。运算符从上到下以降序列出。
在这里插入图片描述

9.3注意

即使有了操作符的优先级和结合性,我们写出的表达式依然有可能不能通过操作符的属性确定唯⼀的计算路径,那这个表达式就是存在潜在⻛险的,建议不要写出特别负责的表达式。

十、 总结

掌握好操作符,可以更好的在编程中得心应手,虽然有一点多,加油,奥利给,干就完了。
在这里插入图片描述

欧耶!!!!!我学会啦!!!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/367469.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

山上有路路难行

原乡情浓 - 邓丽君作词 : Chong Nou作曲 : 汤尼山上有路路难行嘞弯弯曲曲一层又一层嘞小哥要去看小妹嘞不怕山高路不平嘞山上石头大又硬嘞歪歪倒倒一层又一层嘞小哥不怕硬石头嘞只怕小妹心肠硬嘞路边椰树高又高嘞风吹椰树一摇又一授嘞小妹爱哥身体壮嘞可爱小妹身妙条嘞香蕉树上…

机器学习——绪论总结

目录 一、引入 二、基本术语 三、假设空间与归纳偏 四、模型选择 一、引入 机器学习&#xff1a;通过计算手段&#xff0c;得出具有能够自我修改、完善能力的模型&#xff0c;利用经验改善系统自身性能。算法使用数据得到模型的过程即称为学习&#xff0c;或训练 流程&…

前端JavaScript篇之对 rest 参数的理解、ES6中模板语法与字符串处理

目录 对 rest 参数的理解ES6中模板语法与字符串处理 对 rest 参数的理解 rest参数是一种在函数定义中使用的特殊语法&#xff0c;它允许函数接受任意数量的参数&#xff0c;并将它们收集到一个数组中。通俗地说&#xff0c;rest参数就像是一个容器&#xff0c;用来存放函数接收…

cnpm : 无法加载文件 C:\Users\xxx\AppData\Roaming\npm\cnpm.ps1

cnpm命令被禁止使用 我已经安装cnpm &#xff0c;但是使用不了&#xff0c;重新安装也没用。 报错如下图&#xff1a; cnpm无法使用报错 解决问题 1、打开系统Windows PowerShell,使用管理员身份运行。 打开Windows PowerShell 2、输入set-ExecutionPolicy RemoteSigned&a…

深度学习:数据驱动的人工智能革命

文章目录 每日一句正能量前言什么是深度学习推动AI发展不同阶段的“三大驱动 ”1、技术驱动&#xff1a;算法和计算力是主要驱动力2、计算力的三驾马车&#xff1a;芯片、超级计算机、云计算3、数据驱动&#xff1a;描绘个性化画像&#xff1b; 后记 每日一句正能量 一般青年的…

Java数组的遍历

目录 数组的遍历使用for循环遍历数组使用for-each循环遍历数组使用while循环和迭代器遍历数组使用Java 8的流API遍历数组 数组遍历的应用求数组中的最大值查询数组中指定位置的元素将查指定元素对应的索引的功能提取为方法添加数组元素删除数组元素 数组的遍历 Java数组的遍历…

Day17、18、19学习记录

#c语言知识 内存管理 1.作用域 &#xff08;1&#xff09;代码块作用域&#xff08;代码块是{}之间的一段代码&#xff09; &#xff08;2&#xff09;函数作用域 &#xff08;3&#xff09;文件作用域 2.局部变量&#xff08;自动变量auto&#xff09;&#xff1a; 在函…

Matlab plot绘图的 title 语法

x 0:1:10; >> y x.^2 -10*x15; >> plot(x,y) >> title(x_y, interpreter, none) title 里面的 x_y , y不会被当作下标。

软件工程(最简式总结)

目录 第一章:概述 1.软件危机的表现原因 2.常见的软件开发方法包括&#xff1a; 3.软件工程基本原则 4.软件工程三要素 5.设计模式的分类 6.针对变换型数据流设计步骤 7.针对事务型数据流设计步骤 第二章&#xff1a;软件过程 1.软件生命周期 2.软件过程模型 &…

数据结构篇-05:哈希表解决字母异位词分组

本文对应力扣高频100 ——49、字母异位词分组 哈希表最大的特点就是它可以把搜索元素的时间复杂度降到O(1)。这一题就是要我们找到 “字母异位词” 并把它们放在一起。 “字母异位词”就是同一个单词中字母的不同组合形式。判断“字母异位词”有两个视角&#xff1a;1、所含字…

《计算机网络简易速速上手小册》第1章:计算机网络技术基础(2024 最新版)

文章目录 1.1 OSI 模型简介 - 深入探究1.1.1 基础知识1.1.2 重点案例&#xff1a;构建简易 HTTP 服务器1.1.3 拓展案例1&#xff1a;网络层数据包捕获1.1.4 拓展案例2&#xff1a;传输层 TCP 连接 1.2 TCP/IP 协议栈 - 深入探究1.2.1 基础知识1.2.2 重点案例&#xff1a;使用 P…

2.3作业 编写一个shell 脚本,判断输入的是否是数字

#!/bin/bashvar$1 len${#var} j0 for(($j;$j<$len;((j)))) doif [ ${var:$j:1} -eq 0 ]then echo "第$j位数字是0"elif [ ${var:$j:1 } -eq 1 ]then echo "第$j位数字是1"elif [ ${var:$j:1} -eq 2 ]then echo "第$j位数字是2"elif [ ${var:$…

【Linux】理解系统中一个被打开的文件

文件系统 前言一、C语言文件接口二、系统文件接口三、文件描述符四、struct file 对象五、stdin、stdout、stderr六、文件描述符的分配规则七、重定向1. 重定向的原理2. dup23. 重谈 stderr 八、缓冲区1. 缓冲区基础2. 深入理解缓冲区3. 用户缓冲区和内核缓冲区4. FILE 前言 首…

题目: 有1234个数字, 组成多个互不相同且无重复数字的三位数? 都是多少?

lua脚本如下 最原始的解题方法 local str{} local i, j, k0, 0, 0 for i1, 4 do for j1, 4 do for k1, 4 do if i~j and i~k and j~k then str[#str1]i..j..k end end end end print("组成的数有"..#str) print(table.unpack(str)) 运行的结果如下 组成的数有24 1…

【DDD】学习笔记-代码模型的架构决策

代码模型属于软件架构的一部分&#xff0c;它是设计模型的进化与实现&#xff0c;体现出了代码模块&#xff08;包&#xff09;的结构层次。在架构视图中&#xff0c;代码模型甚至会作为其中的一个视图&#xff0c;通过它来展现模块的划分&#xff0c;并定义运行时实体与执行视…

跨平台开发:浅析uni-app及其他主流APP开发方式

随着智能手机的普及&#xff0c;移动应用程序&#xff08;APP&#xff09;的需求不断增长。开发一款优秀的APP&#xff0c;不仅需要考虑功能和用户体验&#xff0c;还需要选择一种适合的开发方式。随着技术的发展&#xff0c;目前有多种主流的APP开发方式可供选择&#xff0c;其…

【HTML 基础】框架 iframe 标签

文章目录 1. 基本用法2. 设置框架样式3. frameborder 和 scrolling 属性4. 在框架中显示其他内容5. 响应式框架6. 注意事项结语 在 Web 开发中&#xff0c;有时候我们需要在页面中嵌套其他网页或内容&#xff0c;这时候就可以使用 HTML 的框架标签之一<iframe>。<ifra…

20240202在WIN10下使用fast whisper缺少cudnn_ops_infer64_8.dll

20240202在WIN10下使用fast whisper缺少cudnn_ops_infer64_8.dll 2024/2/2 10:48 https://blog.csdn.net/feinifi/article/details/132548556 Could not locate cudnn_ops_infer64_8.dll. Please make sure it is in your library path!解决办法 安装cuDNN c:\faster-whisper-…

【MybatisPlus篇】查询条件设置(范围匹配 | 模糊匹配 | 空判定 | 包含性判定 | 分组 | 排序)

文章目录 &#x1f384;环境准备⭐导入依赖⭐写入User类⭐配置启动类⭐创建UserDao 的 MyBatis Mapper 接口&#xff0c;用于定义数据库访问操作⭐创建配置文件&#x1f6f8;创建测试类MpATest.java &#x1f354;范围查询⭐eq⭐between⭐gt &#x1f354;模糊匹配⭐like &…

MySQL的ACID、死锁、MVCC问题

1 ACID ACID代表原子性&#xff08;atomicity&#xff09;、一致性&#xff08;consistency&#xff09;、隔离性&#xff08;isolation&#xff09;和持久性&#xff08;durability&#xff09;。一个确保数据安全的事务处理系统&#xff0c;必须满足这些密切相关的标准。 原…