[C][C运算][取模/取余运算][隐式类型转换][算术转换]详细讲解

目录

  • 1.取模/取余运算
    • 1.取整
    • 2.取模
  • 2.隐式类型转换
  • 3.算术转换


1.取模/取余运算

1.取整

  • C语言默认向0取整trunc()同作用
  • floor() -> 向-∞取整
  • ceil() -> 向+∞取整
  • round() -> 四舍五入

2.取模

  • 定义:如果ad是两个自然数,d非零,可以证明存在两个唯一的整数qr,满足 a = q ∗ d + r a = q*d + r a=qd+r , q为整数,且 0 ≤ ∣ r ∣ < ∣ d ∣ 0 ≤ |r| < |d| 0r<dq被称为商,r被称为余数
  • 取模和取余一样吗?
    • 不能严格等价,但大部分情况差不多
    • 取整
      • 取余:尽可能让商,进行向0取整
      • 取模:尽可能让商,向-∞方向取整
      • **C中%本质是取余
      • 对任何一个> 0的数,对其进行0向取整和-∞取整,取整方向是一致的
        • 故取模等价于取余
      • 对任何一个< 0的数,对其进行0向取整和-∞取整,取整方向是相反的
        • 故取模不等价于取余
    • 符号
      • 参与取余的两个数据,如果同符号,取模等价于取余
  • 若参与运算的数据不同符号
    • 如果参与取余的两个数据符号不同,在C语言中,余数符号,与被除数相同

2.隐式类型转换

  • C的整形算术运算总是至少以缺省整形类型的精度来进行的
  • 整型提升:为了获得这个精度,表达式中的charshort操作数在使用之前会被转化为int
  • 整形提升的意义
    • 表达式的整形运算要在CPU的相应运算器件内执行,CPU内整形运算器(ALU)的操作数的字节长度一般就是int的字节长度,同时也是CPU的通用寄存器的长度
    • 因此,即使两个char类型的相加,在CPU执行时实际上也要先转化为CPU内int的标准长度
    • 通用CPU是难以直接实现两个8 bit字节直接相加运算(虽然机器指令中可能有这种字节相加指令)
      • 所以,表达式中各种长度可能小于int长度的整型值,都必须先转换为intunsigned int,然后才能送入CPU去执行运算
  • 例子
    • bc的值被提升为int,然后再执行加法运算
    • 加法运算完成之后,结果将被截断,然后再存储于a
char a, b, c;
...
a = b + c;
  • 如何进行整形提升?
    • 整形提升是按照变量的数据类型的符号位来提升的
    • 负数的整型提升char c1 = -1;
      • 变量c1的二进制位(补码):11111111
      • 因为char为有符号的char
        • 所以整型提升的时候,高位补符号位1
        • 提升后的结果为11111111111111111111111111111111
    • 正数的整型提升char c2 = 1;
      • 变量c2的二进制位(补码):00000001
      • 因为char为有符号的char
        • 所以整型提升的时候,高位补符号位0
        • 提升后的结果为00000000000000000000000000000001

3.算术转换

  • 如果某个**操作符的各个操作数属于不同的类型**,那么除非其中一个操作数转换为另一个操作数的类型,否则操作就无法进行
  • 下面的层次体系称为寻常算术转换
    • 如果某个操作数的类型在下面这个列表中排名较低,那么首先要转换为另外一个操作数的类型,然后再执行运算
long double
double
float
unsigned long
long
unsigned int
int
  • 但是算数转换要合理,否则会有一些潜在的问题
float f = 3.14;
int num = f; // 隐式转换,会有精度丢失

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

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

相关文章

AI智能体|使用扣子Coze基于IDE创建自定义插件

大家好&#xff0c;我是无界生长。 在使用Coze的过程中&#xff0c;有些个性化场景无法通过插件商店已有的插件满足&#xff0c;这个时候就需要通过自定义插件的方式来实现业务需求。下面将通过一个实际案例来简单介绍下如何使用Coze基于IDE创建自定义插件&#xff0c;完成在Co…

Godot游戏引擎有哪些优势

哈喽呀&#xff0c;大家好呀&#xff0c;淼淼又来和大家见面啦&#xff0c;众所周知在当今游戏开发领域&#xff0c;各种游戏引擎如雨后春笋般涌现&#xff0c;为开发者提供了丰富的选择。而在这些众多的选择中&#xff0c;Godot游戏引擎以其独特的特性和开放源代码的优势&…

java.util.ConcurrentModificationException异常分析及解决

问题描述 有一个RecycleView视图组件&#xff0c;数据变更得时候进行了增加和删除操作&#xff0c;频繁触发 增加、删除数据得操作&#xff0c;低概率出现此问题&#xff0c;代码片段无法展示&#xff0c;可以语言描述一下代码片段 recycleview使用了adapter来展示数据adapte…

SpringBoot集成腾讯云敏感词校验API流程

1.pom.xml中引入腾讯云jar配置信息 <dependency><groupId>com.tencentcloudapi</groupId><artifactId>tencentcloud-sdk-java</artifactId><version>4.0.11</version> </dependency> 2.application.yaml中添加配置 tencent…

2024最新流媒体在线音乐系统网站源码| 音乐社区 | 多语言 | 开心版

简介&#xff1a; 2024最新流媒体在线音乐系统网站源码| 音乐社区 | 多语言 | 开心版 下载地址 https://www.kuaiyuanya.com/product/article/index/id/33.html 图片&#xff1a;

Microsoft.NET 框架程序设计 —— 基元类型、引用类型与值类型

本文讨论.NET 框架开发人员经常遇到的各种数据类型。熟悉这些类型的不同行为对于一个开发人员来说至关重要。当我刚开始接触.NET框架时,就没有完全理解基元类型、引用类型和值类型之间的一些差别。这种模糊的认识甚至无意间导致了一些难以査找的bug以及性能问题。我希望通过本…

【QT】实时语言切换

前言&#xff1a;一个完整的软件开发通常需要支持多种语言&#xff0c;本文主要讲述实时语言切换开发时的相关解决方案。 1. 制作字库文件 添加标识 在需要被翻译的字符串前面标识tr&#xff0c;如QString str&#xff1d;tr(“hello,world!”); &#xff0c;这很重要&#xf…

使用 Django Rest Framework 构建强大的 Web API

文章目录 安装 Django Rest Framework创建序列化器创建视图和 URL 路由配置认证和权限测试 API Django Rest Framework&#xff08;DRF&#xff09;是一个强大的工具&#xff0c;用于在 Django Web 框架中构建灵活且功能丰富的 Web API。它提供了许多功能&#xff0c;包括序列化…

ubuntu22.04 kubeadm安装k8s集群(从零到有)

ubuntu kubeadm安装k8s集群 前言一、初始化所有ubuntu服务器二、安装kubeadm三、kubeadm初始化节点、加入集群四、安装kubesphere1、下载yaml文件2、运行apply报错3、安装完成。4、忘记密码,强制修改5、Kubesphere其他组件安装前言 k8s 三master 三node所有节点hosts文件添加…

android radiongroup应用举例

android radiongroup应用举例 在 Android 中&#xff0c;RadioGroup 是一个特殊的布局容器&#xff0c;用于包含多个 RadioButton 控件。这些 RadioButton 通常一起使用&#xff0c;以便用户可以从一组选项中选择一个。当用户选择其中一个 RadioButton 时&#xff0c;其他 Rad…

(六)DockerCompose安装与配置

DockerCompose简介 Compose 项目是 Docker 官方的开源项目&#xff0c;负责实现对 Docker 容器集群的快速编排。使用前面介绍的Dockerfile我们很容易定义一个单独的应用容器。然而在日常开发工作中&#xff0c;经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现…

线性回归分析

线性回归分析是统计学和数据分析中常用的一种工具&#xff0c;它研究的是因变量与自变量之间的线性关系。在实际应用中&#xff0c;线性回归可以帮助我们理解变量之间的关联&#xff0c;预测未来的趋势&#xff0c;以及进行决策支持。在本选题中&#xff0c;我们将深入探讨线性…

protobuf学习

学习了下protobuf这个工具&#xff0c;可以用来序列化数据结构&#xff0c;而且效率很高&#xff0c;数据可以压缩的更小。 记录下&#xff0c;我这里主要在C#里使用&#xff0c;从NuGet程序包安装以下两个 安装好后可以在该程序目录找到 packages\Google.Protobuf.Tools.3.26.…

在windows中使用wsl下的unbuntu环境

1 unbuntu下载编译环境 编译环境安装命令&#xff1a; sudo apt install gdb sudo apt install gcc sudo apt install g 2 使用vscode正常打开项目&#xff0c;在window中打开的项目&#xff08;官方推荐将项目放在linux中的home目录&#xff09; 但在windows中也可以使用&a…

汐鹤Key码查询,网站授权系统源码

汐鹤Key码查询和网站授权系统源码主要用于特殊虚拟物品销售商家。 下 载 地 址 &#xff1a; runruncode.com/php/19770.html 附带插件功能&#xff08;网站授权&#xff09;&#xff0c;但目前开发内容较少&#xff0c;请谅解&#xff01;同时&#xff0c;代码优化空间很大…

【软考】设计模式之装饰器模式

目录 1. 说明2. 应用场景3. 结构图4. 构成5. 适用性6. 优点7. 缺点8. java示例 1. 说明 1.动态地给一个对象添加一些额外的职责。2.Decorator Pattern。3.就增加功能而言&#xff0c;装饰器模式比生成子类更加灵活。4.一种在不改变现有对象结构的情况下&#xff0c;动态地给对…

Office VBA基础 学习笔记

Office VBA基础 一、引言 VBA&#xff08;Visual Basic for Applications&#xff09;作为office内置的一种编程语言&#xff0c;在自动化办公、数据处理、表单开发等方面发挥着越来越重要的作用。VBA不仅允许用户定制Office应用程序的行为&#xff0c;还能与各种数据库、Web…

垃圾溢满堆放识别检测

垃圾溢满堆放识别检测系统的核心技术是基于YOLO深度学习模型&#xff0c;垃圾溢满堆放识别检测系统能够在监控画面中快速识别出垃圾箱外部的垃圾堆放情况。系统经过大量的训练和优化&#xff0c;能够识别出各种垃圾的特征&#xff0c;并能够准确判断是否溢满堆放。垃圾溢满堆放…

【MySQL精通之路】InnoDB(9)-表和页压缩(1)-表压缩

目录 1.表压缩概述 2.创建压缩表 2.1 在FPT表空间中创建压缩表 2.2 在通用表空间中创建压缩表 2.3 压缩表的限制 3.优化InnoDB表的压缩 4.运行时监控InnoDB表压缩 5.InnoDB表的压缩工作原理 5.1 压缩算法 5.2 InnoDB数据存储和压缩 5.3 B树页面的压缩 5.4 压缩BLOB…

Android HAL Service开发总结

Android HAL Service开发总结&#xff1a; 1.需要针对自己的hwservice编写init.rc启动脚本 vendor.device.xxx_hwfunservice-1.1.rc service vendor.device.xxx_hwfunservice-1.1 /vendor/bin/hw/vendor.device.xxx_hwfun1.1-serviceclass haluser systemgroup systemseten…