C语言操作符详细讲解

前言

本次博客一定会让刚刚学习C语言小白有所收获

本次操作符讲解不仅分类还会有代码示例

好好看 好好学 花上几分钟就可以避免许多坑

1 操作符的基本使用

1.1操作符的分类

按功能分

算术操作符: + 、- 、* 、/ 、%

移位操作符: >>  <<

位操作符: &     |   ^ 

赋值操作符: = 、+= 、 -= 、 *= 、 /= 、%= 、>>= 、&= 、|= 、^=

单⽬操作符: !、++、--、&、*、+、-、~ 、sizeof(类型)

关系操作符: > 、>= 、< 、<= 、 == 、 !=

逻辑操作符: && 、||

(三目操作符)条件操作符: ? :

逗号表达式: ,

下标引⽤: []

 函数调⽤: ()

按性质分为 单目操作符 双目操作符 三目操作符

主要的区分是 单目为一个操作数 双目为两个操作数 三目操作符为三个操作数

1.2操作符的使用

1.21算术操作符

对于算术操作符来说,值得注意的点只有 / %

对于加减乘 任何数据都能实现,但是 除法

在遇到整数时,首先除数不能为0,其次除不尽是只会保留整数

比如 2 /1=2    1/2=0    5/3=1

当然如果是浮点数会保留的 1/2.0=0.5

如果是%(求模) 注意它只服务于整型数据取得的数为余数

大家看看代码呗

是不是   % 只能对整数有效

让大家看看结果

10/3只能保留3   10%3余下一个1

这里没有讲解   加减乘  大家可以自行操作,就是数学中的普通四则运算

1.22移位操作符

>>  <<

移位操作符的操作数只能是整数

<< 左移操作符

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

我们举两个例子来说明情况

注意整型在内存中的存储为补码,我们分别以 -1 与+1来进行左移操作

这是对一的左移

先画图

画的一般,但是能看

继续看-1的左移

我们看看代码

此时a 和 b的大小都变为2倍

>>右移操作符

位规则:⾸先右移运算分两种:

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

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

我们的编译器一般都是算术右移

直接看代码

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

看结果

所以左移操作符的作用是 在不溢出的情况下,使原有的数*2

右移操作符的作用是    在不溢出的情况下,使原有的数/2

1.23位操作符

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

位操作 这里只讲简单的原理即可

1& 按位与

画图吧

2  | 按位或

看图

3^ 按位异或

看图

4按位取反

看图

注意一下再char类型中是如此 它的范围为 -128~127

而short类型的  它的范围为-32768~32767

我们可以看看 它的-32768的原码为

1000 0000 0000 0000

值得注意的是它的补码也是 1000 0000 0000

ok 上述代码都可以通过代码实现

是不是对应上了

1.24赋值操作符:

= 、+= 、 -= 、 *= 、 /= 、%= 、>>= 、&= 、|= 、^=

其实这个没什么可讲的,就是赋值

看代码

int main()
{
	char a = 1;
	char b = 126;
	a = 28;//把28赋值给a
	a += 10;//a=a+10
	a -= 10;//a=a-10;
	a *= 10;//a=a*10;
	a /= 10;//a=a/10;
	a %= 10;//a=a%10;
	a >>= 10;//a=a>>10;
	a &= 1;//a=a&1;
	return 0;
}

1.25单⽬操作符

++   --   !   &   sizeof()

前置++   -- 

是先++ --后使用

后置 ++ --

是先使用后++ --

!是使非0的值变为0       使0变为1

简单举例子就好

int main()
{
	int a = 0;
	int b = 1;
	int c = 1;
	if (++a)
		printf("++a是先加1在使用进入判断哦\n");
	if (!--b)
		printf("--b是先减去1在进入判断哦\n");
	if (c--)
		printf("c--是先使用才会减1哦\n");
	return 0;
}

看结果

 &   sizeof()

&作为单目操作符为去某个数据的地址与 双目操作符&按位与是不同的含义

sizeof()是计算某个数据所占的内存大小

看代码

int main()
{
	int a = 10;
	int* p = &a;
	*p = 20;//改变a的值
	int b = sizeof(p);//计算指针类型的大小
	int c = sizeof(b);//计算int类型的大小
	printf("%d %d %d ", a, b, c);
	return 0;
}

1.26关系操作符:

> 、>= 、< 、<= 、 == 、 !=

这其实更没有必要讲解l

其实就是数学里的比大小,如果成立返回1,不成立返回0

!=为不等于

看代码

所以懂了吗

1.27逻辑操作符

&& 、||

逻辑操作符也是一个很重要的操作符

&&逻辑与   (表达式1)&&(表达式2) 只有两个都为真时 整个式子才为真

||逻辑或       (表达式1)||(表达式2)只要一个为真时 整个式子就为真

给一个最简单的代码吧

int main()
{
	int a = 0 && 0;
	int b = 1 && 1;
	int c = 1 && 0;
	int a1 = 0 || 0;
	int b1 = 1 || 1;
	int c1 = 1 || 0;
	printf("%d %d %d",a,b,c);
	printf("%d %d %d", a1, b1, c1);
	return 0;
}

看结果

当然有注意点的

1两端其实可以是表达式的

2对于(表达式1)&&(表达式2)只要 表达式1为假 那么表达式二直接不运算,整个式子的值为0

3对于(表达式1)||(表达式2)只要 表达式1为真 那么表达式而同样不计算 ,整个式子的值就为1

1.28(三目操作符)条件操作符

 (表达式1)? (表达式2):(表达式3)

如果表达式1为真则执行表达式1否者执行表达式2

很简单

看代码

int main()
{
	int a = 10;
	int b = 20;
	//三目操作符
	int c = 10 > 20 ? 10 - 20 : 10 + 20;
	int d = a>10?10:20;
	//注意后面的表达式只能是一个确切的值,不能是一个赋值表达式
	//a > b ? a + 20 : b =30;//error
	printf("%d %d %d %d", a, b, c, d);
	//还有一种用途,可以用在打印里头 条件打印
	printf(a > b ? "*" : "1");
	return 0;
}

1.29逗号表达式:

是从左到右依次执行代码,取最后一个表达式的值为返回值 看语法

(表达式1,表达式2,表达式3,表达式4,表达式5,表达式6······,表达式n)

 ,  只是一个小小的逗号可能还看不出什么,我们还是看代码说话

int main()
{
	int a = 10;
	int b = 20;
	int c = 30;
	int d = (a = 30, b++, c += 60, 20);
	//那么此时 a为30 b为21 c为90 d取上最后一个表达式的值为20
	//看结果
	printf("%d %d %d %d", a, b, c, d);
	return 0;
}

1.30下标引用 函数调⽤

 []   ()

下标引用  主要用于数组中调用任意位置中的元素

当然他也可以对指针使用等效于 a[0]==*(a+0)

函数调用符号更没什么好讲了,用于函数的调用以及定义

还是举例看代码就好

void haha(int a,int b);//这是函数声明,用了 ()
int main()
{
int a=20;
int *p=&a;
int c=p[0];//算是解引用的一种
int arr[20]={0};//对数组的定义
return 0;
}

至此几乎所有的操作符的基本使用都讲解完了接下来看看优先级以及结合性

1.3操作符的属性

分为优先级、结合性

先上一张图

1.31优先级结合性

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

比如

3 + 4 * 5;

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

结合性

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

5 * 6 / 2;

上⾯⽰例中, * 和 / 的优先级相同,它们都是左结合运算符,所以从左到右执⾏,先计算 5 * 6 , 再计算 6 / 2

运算符的优先级顺序很多,下⾯是部分运算符的优先级顺序(按照优先级从⾼到低排列),建议⼤概 记住这些操作符的优先级就⾏,其他操作符在使⽤的时候查看下⾯表格就可以了

我们可以列出几个优先级问题的代码,一般而言优先级不需要特殊记忆,只要多敲多练即可


看看代码

int main()
{
	int a = 10;
	//看看,如果我们要让a先左移两位再按位与上一个1,就必须要加上括号
	//否则此时是先2与1逻辑与再左移
	int d =(a<<2)&1;
	return 0;
}
//这个很容易搞错,大家以后会遇到这样的代码

再看一个例子

int main()
{
	int arr[20] = {0};
	int** parr = &arr;
	//不加上括号的话编译器无法知道 是先执行 * 还是[] 所以要加上()
	(*parr)[10] = 1;
	return 0;
}

这类例子还有很多,基本上都是解引用的优先级一样不知道先使用那个解应用

对于结合性只需记忆一个点

1 赋值操作符都是从右往左

2三目操作符从右往左

3其他基本都是从左往右

总结

大家还是要多练,才能有理解,祝大家开心

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

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

相关文章

Keil界面乱了,某些图标消失

文章目录 如图 如图 我都不知道怎么搞的第一个 重启界面解决了

【微服务框架】微服务简介

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大三在校生&#xff0c;喜欢AI编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;️…

刷LeetCode:冒泡排序详解 【2/1000 第二题】含imagemagick动态效果图

&#x1f464;作者介绍&#xff1a;10年大厂数据\经营分析经验&#xff0c;现任大厂数据部门负责人。 会一些的技术&#xff1a;数据分析、算法、SQL、大数据相关、python 作者专栏每日更新&#xff1a; LeetCode解锁1000题: 打怪升级之旅 LeetCode解锁1000题: 打怪升级之旅htt…

文生图大模型三部曲:DDPM、LDM、SD 详细讲解!

1、引言 跨模态大模型是指能够在不同感官模态(如视觉、语言、音频等)之间进行信息转换的大规模语言模型。当前图文跨模态大模型主要有&#xff1a; 文生图大模型&#xff1a;如 Stable Diffusion系列、DALL-E系列、Imagen等 图文匹配大模型&#xff1a;如CLIP、Chinese CLIP、…

网络基础(二)——序列化与反序列化

目录 1、应用层 2、再谈“协议” 3、网络版计算器 Socket.hpp TcpServer.hpp ServerCal.hpp ServerCal.cc Protocol.hpp ClientCal.cc Log.hpp Makefile 1、应用层 我们程序员写的一个个解决我们实际问题&#xff0c;满足我们日常需求的网络程序&#xff0c;都是在…

H5抓包——Android 使用电脑浏览器 DevTools调试WebView

H5抓包——Android 使用电脑浏览器 DevTools调试WebView 一、使用步骤 1、电脑通过数据线连接手机&#xff0c;开启USB调试&#xff08;打开手机开发者选项&#xff09; 2、打开待调试的H5 App&#xff0c;进入H5界面 3、打开电脑浏览器&#xff0c;调试界面入口 如果用ed…

百度资源平台链接提交

百度资源平台是百度搜索引擎提供的一个重要工具&#xff0c;用于帮助网站主将自己的网站链接提交给百度搜索引擎&#xff0c;以便更快地被收录和展示在搜索结果中。以下将就百度资源平台链接提交的概念、操作方法以及其对网站收录和曝光的影响进行探讨&#xff1a; 什么是百度资…

高端的电子画册,手机打开你见过吗?

手机阅读的高端电子画册&#xff0c;你见过吗&#xff1f;随着移动互联网的发展&#xff0c;越来越多的人选择在手机上阅读电子画册&#xff0c;而不是传统的纸质画册。这种趋势不仅节省了纸张资源&#xff0c;还提升了阅读体验。用户可以通过触摸屏幕、放大缩小、翻页等操作与…

芒果YOLOv8改进130:Neck篇,即插即用,CCFM重构跨尺度特征融合模块,构建CCFM模块,助力小目标检测涨点

芒果专栏 基于 CCFM 的改进结构,改进源码教程 | 详情如下🥇 💡本博客 改进源代码改进 适用于 YOLOv8 按步骤操作运行改进后的代码即可 即插即用 结构。博客 包括改进所需的 核心结构代码 文件 YOLOv8改进专栏完整目录链接:👉 芒果YOLOv8深度改进教程 | 🔥 订阅一个…

AtCoder Beginner Contest 342 A - D

A - Yay! 大意 给定字符串&#xff0c;其中有且仅有一个字符与其他不同&#xff0c;输出这个字符的下标&#xff08;从1开始&#xff09;。 思路 桶排序统计次数即可。 代码 #include<iostream> #include<vector> using namespace std; int main(){string s;…

Docker 轻量级可视化工具 Portainer

1. 是什么 它是一款轻量级的应用&#xff0c;它提供了图形化界面&#xff0c;用于方便管理Docker环境&#xff0c;也包括单机环境和集群环境。 2. 安装 官网&#xff1a;Kubernetes and Docker Container Management Software 安装路径&#xff1a;Install the Compose plug…

使用 Spring Email 和 Thymeleaf 技术,向新注册用户发送激活邮件(一)

这篇内容对应"2.1 发送邮件"小节 邮箱设置 需要去邮箱对应的官方客户端软件或网站开启IMAP/SMTP服务或POP3/SMTP服务器 如果不开启&#xff0c;就无法使用第三方用户代理&#xff0c;只能走第官方的电子邮件客户端软件或网站&#xff0c;用户代理就是电子邮件客户…

Redis持久化 RDB AOF

前言 redis的十大类型终于告一段落了,下面我们开始redis持久化新篇章 为啥需要持久化呢? 我们知道redis是挡在mysql前面的带刀侍卫 是在内存中的,假如我们的redis宕机了,难道数据直接冲入mysql??? 这显然是不可能的,mysql肯定扛不住这样的场景,所以我们有了redis持久化策略…

Decoupled Multimodal Distilling for Emotion Recognition 论文阅读

Decoupled Multimodal Distilling for Emotion Recognition 论文阅读 Abstract1. Introduction2. Related Works2.1. Multimodal emotion recognition2.2. Knowledge distillation3. The Proposed Method3.1. Multimodal feature decoupling3.2. GD with Decoupled Multimodal …

JUC:ReentrantLock(可打断、锁超时、多条件变量)

文章目录 ReentrantLock特点基本语法可重入可打断&#xff08;避免死等、被动&#xff09;锁超时&#xff08;避免死等、主动&#xff09;公平锁多个条件变量 ReentrantLock 翻译&#xff1a;可重入锁 特点 可中断可设置超时时间&#xff08;不会一直等待锁&#xff09;可设…

算法学习——LeetCode力扣动态规划篇10(583. 两个字符串的删除操作、72. 编辑距离、647. 回文子串、516. 最长回文子序列)

算法学习——LeetCode力扣动态规划篇10 583. 两个字符串的删除操作 583. 两个字符串的删除操作 - 力扣&#xff08;LeetCode&#xff09; 描述 给定两个单词 word1 和 word2 &#xff0c;返回使得 word1 和 word2 相同所需的最小步数。 每步 可以删除任意一个字符串中的一个…

Last-Modified:HTTP缓存控制机制解析

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

nodejs下载安装以及npm、yarn安装及配置教程

1、nodejs下载安装 ​ 1.1、使用nodejs版本管理工具下载安装&#xff0c;可一键安装、切换不同nodejs版本&#xff0c; nvm-setup.zip&#xff1a;安装版&#xff0c;推荐使用 本次演示的是安装版。 1、双击安装文件 nvm-setup.exe 选择nvm安装路径 例如&#xff1a;E:\Soft…

蓝桥杯算法题-图形排版

题目描述 小明需要在一篇文档中加入 N 张图片&#xff0c;其中第 i 张图片的宽度是 Wi&#xff0c;高度是 Hi。   假设纸张的宽度是 M&#xff0c;小明使用的文档编辑工具会用以下方式对图片进行自动排版&#xff1a; 1. 该工具会按照图片顺序&#xff0c;在宽度 M 以内&…

Mysql数据库:MHA高可用架构

目录 前言 一、MHA概述 1、什么是MHA 2、MHA的特点 3、MHA的组成 4、MHA的工作原理 5、故障切换备选主库的算法 二、部署MHA高可用架构 1、环境部署 2、部署主从同步 2.1 修改主配置文件并创建软链接 2.1.1 master 修改主配置文件并创建软连接 2.1.2 slave1 修改主…