C程序设计——运算符1

news2024/9/23 23:26:34


条件运算符

这是一个三目运算符,用于条件求值(?:)。

来源:百度百科

这是C语言里,唯一三目(即三个表达式)运算符。具体格式如下:

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

翻译成人话,就是:表达式1为真吗?如果为真,则执行表达式2;否则执行表达式3 。

int main(void)
{
    int iInt ;
    iInt = 1 ;
    // iInt 等于1 吗,如果等于1 ,iInt 赋值为100;否则 iInt 赋值1000
    (iInt == 1) ? (iInt = 100) : (iInt = 1000) ;
    printf("%d\r\n", iInt);
}

执行结果如下:

如果程序改一下:

int main(void)
{
    int iInt ;
    iInt = 3000 ;
    // iInt 等于1 吗,如果等于1 ,iInt 赋值为100;否则 iInt 赋值1000
    (iInt == 1) ? (iInt = 100) : (iInt = 1000) ;
    printf("%d\r\n", iInt);
}


逗号运算符

用于把若干表达式组合成一个表达式(,)。

来源:百度百科

逗号运算法,可以把多个表达式,组合成一个表达式,比如下面这行代码:

int main(void)
{
    int iA ;
    int iB ;
    int iC ;
    iA = 70 ;
    iB = 30 ;
    iC = 70 + 30;
}

可以通过逗号表达式,合并成下面这样:

int main(void)
{
    int iA ;
    int iB ;
    int iC ;
    iA = 70, iB = 30, iC = 70 + 30;
}

 甚至可以合并成这样:

int main(void)
{
    int iA, iB, iC ;
    iA = 70, iB = 30, iC = 70 + 30;
}

逗号表达式运算时,采用左结合(即先算左面,再算右面)的计算方式,比如下面这段代码:

int main(void)
{
    int iA, iB, iC ;
    iA = 10, iB = 20;
    //iC = iA + iB 在逗号表达式的最右边
    iA = 70, iB = 30, iC = iA + iB;
    printf("%d\r\n", iC);

    iA = 10, iB = 20;
    //iC = iA + iB 在逗号表达式的最左边
    iC = iA + iB, iA = 70, iB = 30;
    printf("%d\r\n", iC);
}

上述代码,注意其中注释的提示,由于 iC = iA + iB 的位置不一样,所以最后打印 iC的值不一样。不过为了防止某些编译器,不按套路出牌,强烈建议:如果逗号表达式中,某变量被赋值,那么该变量,在该逗号表达式中只出现一次。

比如上述  iC = iA + iB 所在的两个逗号表达式中, iA 和 iB 的值被改变了,但是它们出现了两次,建议写成如下形式:

int main(void)
{
    int iA, iB, iC ;
    iA = 10, iB = 20;

    iA = 70, iB = 30;
    iC = iA + iB;
    printf("%d\r\n", iC);

    iA = 10, iB = 20;
    iC = iA + iB;

    iA = 70, iB = 30;
    printf("%d\r\n", iC);
}


指针运算符

用于取内容(*)和取地址(&)二种运算。

来源:百度百科

前面讲指针的时候,讲过这俩,这里就不赘述了。


求字节数运算符

用于计算数据类型所占的字节数(sizeof)。

来源:百度百科

sizeof,用来求变量、类型等的字节数。

比如我们知道,

  1. char 型是一个字节
  2. short int 是两个字节
  3. int 和 long int是四个字节
  4. long long int是八个字节

可以写代码用sizeof 验证一下:

int main(void)
{
    int iSize ;
    iSize = sizeof(char);
    printf("sizeof(char) is          %d\r\n", iSize);

    iSize = sizeof(short int);
    printf("sizeof(short int) is     %d\r\n", iSize);

    iSize = sizeof(int);
    printf("sizeof(int) is           %d\r\n", iSize);

    iSize = sizeof(long int);
    printf("sizeof(long int) is      %d\r\n", iSize);

    iSize = sizeof(long long int);
    printf("sizeof(long long int) is %d\r\n", iSize);

}

代码执行结果如下: 

 

除了计算类型的字节数,还可以计算变量的字节数,比如下面这样:

int main(void)
{
    int iSize ;
    char cC;
    unsigned int iI;
    iSize = sizeof(cC);
    printf("sizeof(cC) is     %d\r\n", iSize);

    iSize = sizeof(iI);
    printf("sizeof(iI) is     %d\r\n", iSize);
}

运行结果如下:

注意:这里其实只讲了一部分用法,后面我们学习数组、结构体时,sizeof 还要再细讲。


特殊运算符

有括号(),下标[],成员(→,.)等几种。

来源:百度百科

这里只讲一下括号运算符的用法:

括号运算符,就是数学上的小括号,含义跟数学上的括号类似,就是括号括起来的表达式,要优先计算,括号里算完了,再算括号外面的。唯一的区别就是,C语言里的括号运算符,只有小括号,但是可以嵌套很多层,当有嵌套时,最多嵌套63层,优先计算最内层括号,括起来的表达式,像下面这样:

int main(void)
{
    int iA ;
    int iB ;
    int iC ;
    iA = 70 ;
    iB = 30 ;

    iC = ((iA + iB) * iC + iA) * iB;
}

上述代码中,用于计算 iC的表达式中,就有两层嵌套的括号,该怎么算,相信只要小学毕业了,都能算出来,就不赘述了。

C语言里的所有运算,都可以用括号表达式括起来,所以个人建议:

个人建议:由于并不是所有人都能像你一样,把C语言所有运算符的优先级都背下来,所以需要优先计算的表达式,要用括号括起来,不用担心括号嵌套层数太多(如果嵌套层数超过63层,说明你的源码有问题,需要梳理一下,看是否可以分成两行来写。),编译器处理的过来。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

测试资料4444

一、HTML 1、HTML介绍 1.1web前端三大核心技术 HTML:负责网页架构 CS&#xff1a;负责网页的样式、美化 JS:负责网页的行为 1.2 HTML标签 单标签:<标签名 > 双标签内容 标签属性&#xff1a; 2 常用标签 script:js标签 style:css标签 link:外部加载css标签

SyntaxError: Unexpected token ‘??=‘ 解决办法

问题 原因 Node 15, 及 以上版本才能使用 ?? 操作符 我的版本&#xff1a; 解决 尝试升级node版本 参考 windows下node升级到最新版本&#xff08;亲测有效&#xff09; 有错误&#xff0c;但也创建成功了。 错误以后再改吧…

初识LLM大模型:入门级工程知识探索与解析

前言 源自脉脉上面刷到的大模型业务工程落地可以做的方向。其实如果不是接触相关工作&#xff0c;有的人可能不会想了解这方面&#xff0c;自己实习做的方向与之相关&#xff0c;因此想调研总结一下行业热点方向与基础入门知识&#xff0c;还有一些的专业词汇的解释。包括但不…

异常—python

一、异常 当检测到一个错误时&#xff0c;Python解释器就无法继续执行了&#xff0c;反而出现了一些错误的提示&#xff0c;这就是异常, 也就是我们常说的BUG&#xff0c;那BUG是怎么由来的呢&#xff1f; 例如&#xff1a; print(1/0) 我们在小学的时候就知道0不能作除数&a…

线段树+二分,CF 431E - Chemistry Experiment

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 431E - Chemistry Experiment 二、解题报告 1、思路分析 贪心的考虑&…

NYX靶机笔记

NYX靶机笔记 概述 VulnHub里的简单靶机 靶机地址&#xff1a;https://download.vulnhub.com/nyx/nyxvm.zip 1、nmap扫描 1&#xff09;主机发现 # -sn 只做ping扫描&#xff0c;不做端口扫描 nmap -sn 192.168.84.1/24 # 发现靶机ip为 MAC Address: 00:50:56:E0:D5:D4 (V…

文心快码(Baidu Comate)初体验

文心快码&#xff08;Baidu Comate&#xff09;初体验 1文心快码简介和安装&#xff1a;简要介绍文心快码&#xff08;Baidu Comate&#xff09;、安装方法、使用方法等&#xff1b; Baidu Comate 是由百度自主研发&#xff0c;基于文心大模型&#xff0c;结合百度丰富的编程现…

【数模修炼之旅】08 支持向量机模型 深度解析(教程+代码)

【数模修炼之旅】08 支持向量机模型 深度解析&#xff08;教程代码&#xff09; 接下来 C君将会用至少30个小节来为大家深度解析数模领域常用的算法&#xff0c;大家可以关注这个专栏&#xff0c;持续学习哦&#xff0c;对于大家的能力提高会有极大的帮助。 1 支持向量机模型…

C++ TinyWebServer项目总结(10. 信号)

信号是由用户、系统、进程发送给目标进程的信息&#xff0c;以通知目标进程某个状态的改变或系统异常。Linux信号可由以下条件产生&#xff1a; 对于前台进程&#xff0c;用户可通过输入特殊终端字符来给它发送信号&#xff0c;如输入CtrlC通常会给进程发送一个中断信号。系统…

学习笔记 韩顺平 零基础30天学会Java(2024.8.24)

P532 Map接口特点2 P533 Map接口方法 P534 Map六大遍历方式 方法一&#xff1a;通过KeySet()&#xff0c;取出所有的Key&#xff0c;把取出的Key放到Set中&#xff0c;再通过Key取出对应的Value 到这里又有两种方式遍历Set&#xff1a;迭代器、增强for 方法二&#xff1a;通过v…

svn使用教程学习

如何撤销未提交的本地修改&#xff1f; 点击svn提交&#xff0c;双击文件&#xff0c;可以查看准备提交的修改内容。 如何撤销已经提交的内容&#xff1f; 选择‘复原此版本做出的修改’&#xff1a; 但是&#xff0c;这个只是复原在本地了&#xff0c;我们需要提交上去&…

pycharm远程调试服务器代码提示,运行‘test’时出错,illegal char at index

pycharm远程调试服务器代码提示&#xff0c;运行‘test’时出错&#xff0c;illegal char at index &#xff0c;illegal char at index 0:4ba0d3dd-ad57-46cb-83d6-dc4e2d307520>/DETR/test.py 并不是在pycharm的右侧remote Host选择服务器上的文件&#xff0c;然后点击执行…

R6RS标准之重要特性及用法实例(三十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列…

java计算机毕设课设—企业电子投票系统(附源码、文章、相关截图、部署视频)

这是什么系统&#xff1f; java计算机毕设课设—企业电子投票系统(附源码、文章、相关截图、部署视频) 企业电子投票系统是一款高效便捷的在线投票平台包括前端普通用户和后端管理员两大模块&#xff0c;普通用户可登录投票、查看结果&#xff0c;管理员则负责后台管理&#…

利用 Windows CryptoAPI 中的关键欺骗漏洞

背景 三个月前,在我们 2022 年 10 月补丁星期二分析中,我们分享了 Windows CryptoAPI 中一个严重欺骗漏洞 CVE-2022-34689 的基本描述。据微软称,此漏洞允许攻击者“欺骗其身份并以目标证书的身份执行身份验证或代码签名等操作”。 CryptoAPI 是 Windows 中用于处理与加密…

IEEE T-ASLP | 利用ASR预训练的Conformer模型通过迁移学习和知识蒸馏进行说话人验证

近期&#xff0c;昆山杜克大学在语音旗舰期刊 IEEE/ACM Transactions on Audio, Speech and Language Processing (TASLP)上发表了一篇题为“Leveraging ASR Pretrained Conformers for Speaker Verification Through Transfer Learning and Knowledge Distillation”的论文。论…

Wireshark Lab: TCP v7.0

Wireshark Lab: TCP v7.0 1. Capturing a bulk TCP transfer from your computer to a remote server 步骤 打开浏览器&#xff0c;在url中输入http://gaia.cs.umass.edu/wiresharklabs/alice.txt &#xff0c;然后右键点击另存为下载文本。 访问http://gaia.cs.umass.edu/w…

【JVM】类加载器、双亲委派、SPI(一)

类加载器、双亲委派、SPI 类加载器 JVM中有两种类型的类加载器&#xff0c;由C编写的及由Java编写的。除了启动类加载器(BootstrapClassLoader)是由C编写的&#xff0c;其他都是由Java编写的&#xff0c;由Java编写的类加载器都继承自类java.lang.ClassLoader.JVM还支持自定义…

父子进程资源问题+vfork

一、从内存的角度分析父子进程资源问题 父子进程在内存资源使用上既共享又独立。它们通过写时复制技术实现地址空间的共享&#xff0c;但在修改数据时各自维护独立副本。代码段共享以节省内存&#xff0c;同时继承并打开的文件描述符等系统资源需注意同步和互斥问题。这种特殊…

Linux云计算 |【第二阶段】SECURITY-DAY1

主要内容&#xff1a; 监控基础&#xff08;系统监控命令、监控软件&#xff09;、Zabbix监控服务端部署、Zabbix监控客户端部署、创建监控主机、调用监控模板、自定义key、创建模板、应用集、监控项、绑定模板&#xff1b; 一、监控概述 1&#xff09;监控的目的 ① 实时报…