【C除法和取余】除法和负数取余你真的会了吗?

简介: 【C除法和取余】除法和负数取余你真的会了吗?

除法(取整方式)

1.🎈 向0取整

我们编程中最常见的取整方式就是向0取整

画个数轴你就明白了

c17f035f5876433085eff7f04bd90215.png

printf("%d\t%d\n",-7/2,7/2);

结果不出所料:

948c66e4c5b94930b18b94fa93e9fb5d.png

通过这个:你就可以在编程中快速求出一个数的除数:先算出数学除法值,然后再向0取整就可以了


2.🎈trunc函数


功能和编程中的除法一样就是向0取整

引用头文件#include

函数的返回值均是double,要强制转换为int

备注:下列函数都要引用头文件#include,返回值都是double类型,输出时要强转为int

数轴助记:


c17f035f5876433085eff7f04bd90215.png

使用:

printf("%d\t%d\n", (int)trunc(-3.5), (int)trunc(3.5));//向0取整


3.🎈向下取整(floor函数)

floor:地板,有‘下’的意思;

数轴助记:

4329d95dc77e48c39934dc2eb78ecf31.png


使用:

printf("%d\t%d\n", (int)floor(-3.5), (int)floor(3.5));//向下取整

4.🎈向上取整(ceil函数)

ceil:天花板,有‘上’的意思;

数轴助记:


7bee5df54e3e4c09ad93608ec5e0aefb.png

使用:

printf("%d\t%d\n", (int)ceil(-3.5), (int)ceil(3.5));//向上取整

5.🎈四舍五入取整(round函数)

使用:

printf("%d\t%d\n", (int)round(-3.2), (int)round(3.2));//四舍五入取整

6.🎈关于取整总结:

#include<stdio.h>
#include<math.h>//引用头文件
int main()
{
  //下列函数的返回值均是double,要强制转换为int
  printf("%d\t%d\n", -7/2,7/2);//向0取整
  printf("%d\t%d\n", (int)trunc(-3.5), (int)trunc(3.5));//向0取整
  printf("%d\t%d\n", (int)floor(-3.5), (int)floor(3.5));//向下取整
  printf("%d\t%d\n", (int)ceil(-3.5), (int)ceil(3.5));//向上取整
  printf("%d\t%d\n", (int)round(-3.5), (int)round(3.5));//四舍五入取整
  printf("%d\t%d\n", (int)round(-3.2), (int)round(3.2));//四舍五入取整
  return 0;
}

运行结果:

3ab5406352254a01ae3fc800fb90a907.png


以上这些函数的作用:

1.比如你是一名运动员,你在写这个的年龄的时候,就可以利用这个规则,减小自己的岁数

2.比如你是一名职场管理人士,你在写这个的年龄的时候,就可以利用这个规则,增大自己的岁数

负数取余

下面正数取余没什么特殊的地方,因此我们主要讲讲负数的取余


取余这块就没有像取整一样有那么多函数,但是既然我把取余和取整放一块肯定有特别的意义,快和我一起看看吧!

使用:



printf("%d\t%d\n", -7 % 2, 7 % 2);
  //-7/2=-3,余-1
  //7/2=3,余1

结果:

ed2128edb7694a0fa76e300efb970b43.png


最早的取余定义:0<=余数<被除数


c01d4ee9d53a4009a31e724812fa004a.png


但是后来人们发现:(同样是-10%3)


不同的语言,同一个表达式的对取余的结果大相径庭:

C语言:-10=-33-1,其中-3是商,-1是余数,是负余数

python:-10=-43+2,其中-4是商,2是余数,是正余数

本质原因的和商有关,也就是和除法的取整方式有关


所以对于求余数的概念有所修订:0<=|余数|<|被除数|


925b9cda3054407e99eadf08f29a834c.png


**备注:python学习者对于小细节勿喷,只是不想让C学语言者纠结 **


合理解释:


余数和商有关,而商又和除法的取整方式有关!


另一个角度理解C和python中的取‘余’:


C语言:余数尽可能向0靠近

python:余数尽可能向负无穷靠近


运算技巧:

先用取整方式算出商,再算余数


取余的题解实际用例:


请你将一个十进制数转换为一个二进制数


或许你会这么做:


while(n!=0)
{
  a[len++]=n%2;
  n=n/2;
}


n是正数的话显然可以,

举个例子:

11%2商5余1,行

但是要是这个n是负数呐?

举个例子:

-11%2商-5余-1,不行!(二进制只能是0和1)

所以这个无论在平时计算时有更深的理解,而且在实际的编程中理解也会更透彻!


目录
相关文章
|
存储 自然语言处理 算法
【编译原理】LR(1)分析法:C/C++实现
【编译原理】LR(1)分析法:C/C++实现
1685 0
|
缓存 Linux 调度
操作系统-CPU粘合
操作系统-CPU粘合
375 0
|
SQL 搜索推荐 Java
MyBatis项目中使用GROUP BY分组查询出现异常的原因分析和修复记录
本篇文章记录了在MyBatis项目中使用SQL中的分组查询GROUP BY语句,查询多个字段时数据查询报错的问题。分析了导致GROUP BY查询语句报错的原因并提出解决这样问题的方法。通过对这样问题的解决记录,可以帮助大家在使用MyBatis中的GROUP BY查询时避免出现一些问题。
3911 0
MyBatis项目中使用GROUP BY分组查询出现异常的原因分析和修复记录
|
9月前
|
NoSQL 关系型数据库 Linux
ERPNext 搭建教程:Linux 一键部署与维护
ERPNext 是一款开源免费的企业资源计划系统,适用于中小企业信息化管理。基于 Python 和 Frappe 框架开发,支持财务、销售、人力、库存等模块,具备高度可定制性。本文介绍如何通过 Websoft9 在 Linux 下快速部署 ERPNext,并提供环境配置、系统维护等实用建议,适合开发者和企业用户快速上手。
1592 7
ERPNext 搭建教程:Linux 一键部署与维护
|
存储 人工智能 安全
基于区块链的数字身份认证:重塑身份安全的新范式
基于区块链的数字身份认证:重塑身份安全的新范式
1442 16
|
机器学习/深度学习 计算机视觉
YOLOv11改进策略【Backbone/主干网络】| 替换骨干网络为2023-CVPR LSKNet (附网络详解和完整配置步骤)
YOLOv11改进策略【Backbone/主干网络】| 替换骨干网络为2023-CVPR LSKNet (附网络详解和完整配置步骤)
989 0
YOLOv11改进策略【Backbone/主干网络】| 替换骨干网络为2023-CVPR LSKNet (附网络详解和完整配置步骤)
Vue3统计数值(Statistic)
这是一个基于 Vue3 的统计数值组件 `Statistic`,用于展示数据指标。它支持设置标题、数值内容、精度、前缀、后缀及千分位标识符等,并可通过插槽和自定义函数实现更丰富的展示效果。
595 2
Vue3统计数值(Statistic)
|
监控 负载均衡 应用服务中间件
Keepalive 解决nginx 的高可用问题
Keepalive 解决nginx 的高可用问题
|
机器学习/深度学习 自然语言处理
预训练-微调范式
预训练-微调范式
574 1
|
消息中间件 大数据 Kafka
高效处理大数据:Kafka的13个核心概念详解
大家好,我是小米!今天我将为大家深入解析Kafka的核心概念,包括消息、批次、主题、分区、副本、生产者、消费者、消费组等内容。通过这篇文章,你将全面了解Kafka的工作机制和应用场景,为你的大数据处理提供有力支持。准备好了吗?让我们开始吧!
506 4

热门文章

最新文章