C语言—运算符

news/2025/3/14 17:49:54/

文章目录

  • 1 自增自减
  • 2 关系运算符
  • 3 逻辑运算符
  • 4 条件运算符
  • 5 逗号运算符
  • 6 位运算符

1 自增自减

自增(++)自减(–)有两种形式,以自增为例

  • ++i
    先将i的值加1,然后用新的值参与运算。
  • i++
    i先用原值参与运算,然后再加1。

看上面的介绍,对于自增和自减很好理解,符号在前和符号在后也很好理解。但是当碰到printf时,事情就变得有趣起来。我们首先看一个例子

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

输出结果为

3,2,3

下面来看一下为什么。printf是从右往左计算,从左往右输出。就是说函数printf从右到左压栈,然后将先读取到的放到栈底,最后读取到的放到栈顶,输出时候从栈顶开始

如此来看上面的计算过程,从右往左开始处理,先处理++i,++i是先计算后使用,也就是i先加1,变成2,但是暂时不使用。再往后处理i++,先使用,后计算。就是说先将i=2输出,然后再加1,此时i=3,这时计算完成,++i开始使用i的值,输出为3。最终i值为3,所以i的输出为3。printf输出的时候是从左往右,因此输出结果为3,2,3。

建议在程序设计时不要使用难以理解的表示方法,可以提高程序的可读性和可维护性。

2 关系运算符

常用的关系运算符有,等于(==),小于(<),大于(>),小于等于(<=),大于等于(>=),不等于(!=)。关系运算符的使用比较简单,这里就不再赘述了。

3 逻辑运算符

常用的逻辑运算符有,逻辑与(&&),逻辑或(||)和逻辑非(!)。逻辑运算符的使用也比较简单,这里也不再赘述了。

4 条件运算符

在介绍条件运算符之前,我们先看一小段简单的程序

#include<stdio.h>int main()
{int i = 1;int j = 10;int m = 0;if (i > j){m = i;}else{m = j;}printf("%d",m);return 0;   
}

输出值为10,很简单。但是我们这么一大段程序,只为了把i和j中最大的值赋值给m,实在有些没必要。C语言中提供了条件运算符供我们使用。条件运算符的基本格式为

表达式1 ? 表达式2 : 表达式3;

它的意思是,如果表达式1为真,那么就取表达式2的值,否则取表达式3的值。这样的话可以用一句很简短的程序来实现上面的功能

    m = (i > j) ? i : j;

5 逗号运算符

逗号运算符的基本形式是

(表达式1 , 表达式2 , 表达式3 , …… , 表达式n);

逗号运算符比较简单,它常用于有多个表达式,但是只需要一个表达式的情况。上面的输出值为表达式n的值。

在使用逗号运算符时需要注意,逗号运算符的优先级是最低的。可以看一个例子

#include<stdio.h>int main()
{int i = 1;int j = 10;int m = 0;m = (i + j , j - i);printf("%d",m);return 0;   
}

输出结果为9

#include<stdio.h>int main()
{int i = 1;int j = 10;int m = 0;m = i + j , j - i;printf("%d",m);return 0;   
}

输出结果为11。是因为逗号运算符的优先级低于赋值运算符,所以在计算完“i + j”之后就赋值了。

6 位运算符

位运算符要求操作数是整型数。常见的位运算符有六种

运算符含义说明
~取反对数据按位取反
&按位与对数据按位与,1010 & 0111 = 0010
^按位异或对数据按位异或,1010 ^ 0111 = 1101
<<左移按照二进制的形式把所有数字向左移动对应的位数,低位补0
>>右移按照二进制的形式把所有数字向右移动对应的位数,低位移出(舍弃),高位的空位补符号位,正数补0,负数补1

除此之外还有按位或“|”,它的作用是对数据按位或,1010 | 0111 = 1111。


http://www.ppmy.cn/news/913110.html

相关文章

OpenCv图像基本变换

目录 一、图像翻转 二、图像旋转 三、仿射变换之平移 四、仿射变换之获取变换矩阵 五、仿射变换之透视变换 一、图像翻转 图像翻转不等同于旋转&#xff0c;类似于一些视频的拍摄&#xff0c;拍摄后实际是左右颠倒的&#xff0c;通过图像翻转可进行还原 案例代码如下: …

新品发布:总线视频监控专用VGA显示驱动模组

针对大屏幕的视频监控应用&#xff0c;迪文特推出带FSK总线摄像头接口的VGA显示驱动模组产品&#xff1a;MVGA06-26。该产品采用T5L2单芯片驱动&#xff0c;提供标准VGA接口连接各类显示器&#xff0c;并设有2Pin按压端子座、双孔AV端子座两种总线摄像头接口形式&#xff0c;接…

基于CH374的USB摄像头驱动设计

现有视频监控系统的设计大都采用 USB视频采集和以太网传输&#xff0c;并且需要视频压缩方案&#xff0c;通常需要操作系统支持&#xff1b;因此选取的开发平台价格昂贵&#xff0c;造成视频临控系统的成本居高不下&#xff0c;以致使小型工厂和家庭用户难以接受。 本 课题采用…

计算机控制系统总线,计算机控制系统功能之现场总线控制-电脑自学网

现场总线是连接智能现场设备和自动化系统的数字式、双向传输、多分支结构的通信网络。现场总线控制始于 20 世纪 80 年代末&#xff0c;它将计算机网络通信与管理引入了控制领域&#xff0c;并广泛应用于过程自动化、制造自动化、楼宇自动化等领域。现场总线控制系统(Fieldbus …

Linux SPI总线和设备驱动架构之三:SPI控制器驱动

通过第一篇文章&#xff0c;我们已经知道&#xff0c;整个SPI驱动架构可以分为协议驱动、通用接口层和控制器驱动三大部分。其中&#xff0c;控制器驱动负责最底层的数据收发工作&#xff0c;为了完成数据的收发工作&#xff0c;控制器驱动需要完成以下这些功能&#xff1a; 1.…

windows下编程控制摄像头(一)

使用VFW在windows下编程控制摄像头&#xff08;一&#xff09; Microsoft Video for Windows (VFW) 提供的函数可以让应用程序去处理视频数据。 VFW 在16位Windows的时候就被引入了。它的许多重要功能已经被DirectX取代了。 要获得更多的信息&#xff0c;你可以参考DirectX 的文…

从零开始写CMOS摄像头驱动(一)

先给自己打个广告&#xff0c;本人的微信公众号正式上线了&#xff0c;搜索:张笑生的地盘&#xff0c;主要关注嵌入式软件开发&#xff0c;股票基金定投&#xff0c;足球等等&#xff0c;希望大家多多关注&#xff0c;有问题可以直接留言给我&#xff0c;一定尽心尽力回答大家的…

只需一个提示词解除GPT-4的字符限制!

ChatGPT的内存有限,GPT-3.5-turbo的限制为4897个令牌,而GPT-4的最大限制为8192。如果您在使用GPT-4进行聊天时超过8192个令牌(约6827个单词),它就会开始遗忘。我想出了一种新的技巧,可以轻松将对话扩展10倍。 这种技巧不会将对话中的每个字都保存到内存中。当您去开会时,会有人…