再学C语言15:其他运算符

news2024/12/24 2:26:33

C大约有40个运算符

一、sizeof运算符和size_t运算符

sizeof运算符:以字节为单位返回其操作数大小;操作数可以是一个具体的数据对象(如一个变量名)或者一个类型(如float);如果数据对象是一个类型,必须被括在圆括号中

C有一个typedef机制,允许为一个已有的类型创建一个别名

size_t 类型表示C中任何对象所能达到的最大长度,它是无符号整数,C的头文件系统可以使用typedef使size_t在系统中作为unsigned int或unsigned long的同义词

二、取模运算符(modulus operation):%

功能:用于整数运算,计算其右边的整数除其左边的整数得到的余数

对浮点数使用取模运算符是无效的

负数取模(C99标准):如果第一个操作数为负数,得到的模为负数;如果第一个操作数为整数,得到的模为正数

三、增量和减量运算符:++和--

1. 增量运算

增量运算符:将其操作数的值增加1

两种方式:前缀(运算符出现在操作数之前)和后缀(运算符出现在操作数之后);两种方式的区别在于值的增加这一地址发生的时间不同

示例代码:

#include <stdio.h>
int main(void)
{
    int a = 0;
    int b = 0;
    int c, d;

    c = a++;
    d = ++b;

    printf("The value of c is %d \n", c);
    printf("The value of d is %d \n", d);

    return 0;

}

运行结果:

4d209a2c7d2f4a0c850d8291eebf738a.png

实际中要慎重选择前缀或后缀,因为得到的结果可能不同

b = ++i; // 如果使用i++会有不同结果
//可以使用下面的代码进行替代:
++i;
b = i; // 上一行使用++i或i++均不会影响计算结果

增量运算和减量运算可以帮助精简代码,让程序看起来更简洁,有助于产生更高效的机器代码;缺点是可能会让代码变得难以理解

2. 减量运算

每种形式的增量运算符都有一种形式的减量运算符与之对应(即前缀和后缀两种形式)

3. 增量和减量运算符的优先级

增量和减量运算符具有很好的结合优先级,只有圆括号比它们的优先级高

增量运算符和减量运算符只能影响一个变量

4. 注意事项

为了防止出错,不要一次使用太多的增量运算符

C中,编译器可以选择先计算函数中哪个参数的值,这个自由提高了编译器的效率,但是如果在函数参数中使用了增量运算符就会有麻烦,如:

printf("%10f %10d\n", num, num*num++);

又如:

res = num / 2 + 5 * (1 + num++);

编译器有可能不会按照程序员所希望的顺序进行具体的操作,结果是不确定的,C标准没有定义结果将会是什么,使用不同的编译器可能会出现不同的结果

两个基本的原则可以避免此问题

1)如果一个变量出现在同一个函数的多个参数中时,不要将增量运算符和减量预算符用于其上面

2)当一个变量多次出现在一个表达式中时,不要将增量运算符和减量运算符用于其上面

本质上还是编程习惯的问题,养成规范的习惯,可以在很多地方少犯不必要的错误

 

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

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

相关文章

unity前端通过java后端实现将图片上传到阿里云OSS并在前端显示

一、开通对象存储OSS服务 阿里云-搜索推荐 &#xff08;1&#xff09;申请阿里云账号 &#xff08;2&#xff09;实名认证 &#xff08;3&#xff09;开通对象存储oss服务 &#xff08;4&#xff09;进入管理控制台 &#xff08;5&#xff09;创建bucket &#xff08;6&a…

基于注解的自动装配之@Autowired的原理及注意事项

基于注解的自动装配之Autowired的原理及注意事项 1. Autowired的原理 首先根据所需要的组件类型到IOC容器中查找 能够找到唯一的bean&#xff1a;直接执行装配 如果完全找不到匹配这个类型的bean&#xff1a;装配失败 和所需类型匹配的bean不止一个 没有Qualifier注解&#…

YGG 与 Mike Ovecka 对 Web3 电子竞技的愿景

&#xff08;从左到右&#xff09;YGG 内容创作者 Een Mercado、Ampverse Web3 负责人 Sascha Jochum、Axie Infinity 菲律宾负责人 Nix Eniego、MetaSports 联合创始人兼 CEO Joe Josue 和 YGG 电子竞技负责人 Mike Ovecka 在 Philippine Web3 Festival 的“区块链游戏电子竞…

MybatisPlus代码生成器配置(处理blob等类型)

一&#xff1a;新建springboot项目 二&#xff1a;导包 <dependencies><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.3.2</version></dependency><depe…

ATJ2158界面绘制LVGL---定时器

LVGL定时器 在lv_timer.c中有相关的操作函数 Create a timer&#xff08;创建定时器&#xff09; LVGL 有一个内置的定时器系统。可以注册一个函数以定期调用它。定时器在lv_timer_handler()中被处理和调用&#xff0c;它需要每隔几毫秒调用一次 Ready and Reset&#xff0…

fio磁盘压测工具

文章目录背景安装测试如何模拟现实中的IOfio参数解释【1】随机读测试【2】随机写测试【3】 顺序读测试【4】 顺序写测试numjobs5 测试随机读随机写顺序读顺序写blktracefio 模拟真实IO场景查看 blktrace 记录的结果将结果转化为二进制文件使用 fio 重放日志结论背景 因为是虚拟…

Oracle 备份与恢复常见的七大问题

为了最大限度保障数据的安全性&#xff0c;同时能在不可预计灾难的情况下保证数据的快速恢复&#xff0c;需要根据数据的类型和重要程度制定相应的备份和恢复方案。在这个过程中&#xff0c;DBA的职责就是要保证数据库&#xff08;其它数据由其它岗位负责&#xff09;的高可用和…

Linux常用操作(下)

目录 文件传输 全局查找 管道符 统计数目 vim快捷键 软件安装 用户和组 文件权限 文件传输 yum install lrzsz -y rpm -qa |grep lrzsz 完成后直接将文件拖入xshell即可 全局查找 grep 字符串 文件名 grep colea * grep -r colea *//递归全局查找 管道符 ps -ef…

边缘AI概述

随着移动计算和物联网&#xff08;IoT&#xff09;应用程序的爆炸性增长&#xff0c;数十亿移动和物联网设备正在连接到互联网&#xff0c;在网络边缘生成大量数据。因此&#xff0c;在云数据中心收集大量数据会产生极高的延迟和网络带宽使用。 因此&#xff0c;迫切需要将人工…

K8S——调用亲和性

k8s-调度亲和性 简介 Scheduler 是 kubernetes 的调度器&#xff0c;主要的任务是把定义的 pod 分配到集群的节点上。听起来非常简单&#xff0c;但有 很多要考虑的问题&#xff1a; 公平&#xff1a;如何保证每个节点都能被分配资源资源高效利用&#xff1a;集群所有资源最…

为什么NoSQL数据库这么受欢迎?

大数据时代&#xff0c;NoSQL数据库是企业构建数据能力的核心工具之一。近期&#xff0c;在2022腾讯全球数字生态大会NoSQL数据库专场上&#xff0c;腾讯云发布了多项NoSQL产品能力升级&#xff0c;并重点讲解了其背后的自研技术要点及实现细节&#xff0c;分享了腾讯云NoSQL为…

利用Python自动生成请假条,实现高效摸鱼

哈喽兄弟们&#xff0c;今天咱们来实现用Python来批量生成请假条&#xff0c;这回既学了东西又做了事情&#xff0c;两不误~ 本文就将基于一个真实的办公案例进行讲解如何提取Excel内容并创建Word 主要将涉及以下三个知识点 openpyxl 读取 Excel 文件python-docx 写入 Word …

org.springframework.jdbc.BadSqlGrammarException: Error updating database

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; org.springframework.jdbc.BadSqlGrammarException: Error updating database 报错信息&#xff1a; org.springframework.jdbc.BadSqlGrammarException: Error updat…

Python基础入门(一)

文章目录前言Python起源简介常量和表达式什么是变量变量的语法变量的定义变量的命名规则使用变量变量的类型动态类型的变量注释注释是什么注释的基本语法注释的书写规范输入输出通过控制台输出格式化输出输入转义字符运算符算数运算符关系运算符逻辑运算符赋值运算符复合赋值运…

Python高频面试题——迭代器和可迭代对象

无论是面试测试还是运维涉及到python编码岗位时&#xff0c;迭代器和可迭代对象都是绕不开的一个问题&#xff0c;本文对这两个概念进行重点讲解&#xff0c;本文从什么是迭代讲起&#xff0c;然后介绍迭代器和可迭代对象二者的区别&#xff0c;最后通过for 循环和自定义迭代器…

150万奖金:首届6G智能无线通信系统大赛正式上线

通信与人工智能技术的深度融合已成为无线通信系统发展的最重要方向之一&#xff0c;面向6G&#xff0c;通信与AI融合的角度和深度将进一步扩展&#xff0c;迎接“无限”可能。在6G研究的关键发展阶段&#xff0c;由IMT-2030(6G)推进组主办&#xff0c;中国信息通信研究院、华为…

【折腾服务器 3】群晖学习版中安装 Active Backup for Business 及相关配置 =)

Catch UP 书接上回&#xff0c;在 ESXi 中安装了群晖系统&#xff0c;这个系统主要是用来给 Windows 物理机做备份的&#xff0c;因此在本片主要讲解如何配置 Active Backup for Business 软件。 Chapter 1 设置存储空间 上一篇博客中&#xff0c;安装群晖时分配了一个 32GB…

rancher2.6.2 单机及高可用部署

rancher2.6.2 单机及高可用部署 文章目录rancher2.6.2 单机及高可用部署前言单机部署高可用部署k8s集成前言 1、服务器准备 单机部署&#xff1a; 机器名IP地址部署内容cpu核心数内存(G)硬盘(G)rancher-master192.168.0.18rancher2450 高可用部署&#xff1a; 机器名IP地址…

Linux环境下通过命令行连接WIFI

一. 前言 在调试ARTIK时由于Ubuntu系统不是图形化界面&#xff0c;需要下载相关安装包时发现未联网&#xff0c;因此对Linux下采用命令行连接wifi的具体操作步骤进行总结&#xff0c;对自己在操作过程中遇到的相关问题解决方法进行介绍&#xff0c;同时对于LINUX下无线网络调试…

JUC(一):线程池

个人博客地址&#xff1a; http://xiaohe-blog.top/index.php/archives/14/ 文章目录1. 为什么要使用线程池2. Executor3. ThreadPoolExecutor3.1 七个参数3.2 任务队列3.3 拒绝策略4. 创建线程池5. Executors5.1 CachedThreadPool5.2 FixedThreadPool5.3 SingleThreadExecutor…