目录

前言

取整

向0取整

向-∞取整

向+∞取整

四舍五入取整

汇总

取模\余

对于正数取模

对于负数取模

取余和取模的理解


前言


本文主要讲解并真正理解取余\取模运算是怎样的!

取整


首先取整有四种类型:

  1. 向0取整
  2. 向-∞取整
  3. 向+∞取整
  4. 四舍五入取整

向0取整

  • 示例:
int main()
{ //本质是向0取整 int i = -2.9; int j = 2.9; printf("%d\n", i); //结果是:-2 printf("%d\n", j); //结果是:2return 0;
}

注:运行结果并不是像我们想的四舍五入数学取整,在C语言中本质是向0取整

当然对于向0取整我们也可以使用trunc库函数(需包含math.h头文件)
  • 示例:
#include <stdio.h>
#include <math.h> //使用了trunc函数,需要添加该头文件
int main()
{ //本质是向0取整,注意输出格式printf("%.1f\n", trunc(-2.9)); //-2printf("%.1f\n", trunc(-2.1)); //-2 printf("%.1f\n", trunc(2.9)); //2 printf("%.1f\n", trunc(2.1)); //2return 0;
}

向-∞取整

这里我们需要floor库函数(需包含math.h头文件)
  • 示例:
#include <stdio.h>
#include <math.h> //因为使用了floor函数,需要添加该头文件
int main()
{ //本质是向-∞取整,注意输出格式printf("%.1f\n", floor(-2.9)); //-3 printf("%.1f\n", floor(-2.1)); //-3 printf("%.1f\n", floor(2.9)); //2 printf("%.1f\n", floor(2.1)); //2return 0;
}

向+∞取整

这里我们需要ceil库函数(同样是math.h头文件)

  • 示例:
#include <stdio.h>
#include <math.h>
int main()
{ //本质是向+∞取整,注意输出格式printf("%.1f\n", ceil(-2.1)); //-2 printf("%.1f\n", ceil(2.9));  //3 printf("%.1f\n", ceil(2.1));  //3 return 0;
}

四舍五入取整

这里我们需要round库函数(math.h头文件)

  • 示例:
#include <stdio.h>
#include <math.h>
int main()
{ //本质是四舍五入,同样注意输出格式printf("%.1f\n", round(2.1)); printf("%.1f\n", round(2.9)); printf("%.1f\n", round(-2.1)); printf("%.1f\n", round(-2.9));return 0;
}

汇总

#include <stdio.h>
#include <math.h>
int main()
{ const char * format = "%.1f \t%.1f \t%.1f \t%.1f \t%.1f\n";                       printf("value\tround\tfloor\tceil\ttrunc\n"); printf("-----\t-----\t-----\t----\t-----\n"); printf(format, 2.3, round(2.3), floor(2.3), ceil(2.3), trunc(2.3)); printf(format, 3.8, round(3.8), floor(3.8), ceil(3.8), trunc(3.8)); printf(format, 5.5, round(5.5), floor(5.5), ceil(5.5), trunc(5.5)); printf(format, -2.3, round(-2.3), floor(-2.3), ceil(-2.3), trunc(-2.3)); printf(format, -3.8, round(-3.8), floor(-3.8), ceil(-3.8), trunc(-3.8)); printf(format, -5.5, round(-5.5), floor(-5.5), ceil(-5.5), trunc(-5.5));return 0;
}
  • 输出结果:

结论:浮点数(整数/整数),是有很多的取整方式的 

取模\余


  • 定义:
如果a和d是两个自然数,d非零,可以证明存在两个唯一的整数 q 和 r
满足 a = q*d + r 且0 ≤ r < d。其中,q 被称为商,r 被称为余数

对于正数取模

  • 示例:
int main()
{ int a = 10; int d = 3; printf("%d\n", a%d); //结果是1 (c,python结果相同)//因为:a=10,d=3,q=3,r=1 0<=r<d(3) //所以:a = q*d+r -> 10=3*3+1 return 0;
}

对于负数取模

  • 示例:
int main()
{ int a = -10; int d = 3;printf("%d\n", a/d); //C语言中是-3,python是-4printf("%d\n", a%d);//C语言中是-1,python是2return 0;
}

为什么就有差异了呢?

  • 解释:
C: -10 = (-3) * 3 + (-1)
Python:-10 = (-4)* 3 + 2
  • 从上看出:

具体余数r的大小,本质是取决于商q的,而取商取决于取证规则

由此对于负数“取模”结果的不同,我们分别称之为正余数和负余数

取余和取模的理解


取余:尽可能让商,进行向0取整
取模:尽可能让商,向-∞方向取整

从而C中%,本质其实是取余;Python中%,本质其实是取模

对任何一个大于0的数,对其进行0向取整和-∞取整,取整方向是一致的,故取模等价于取余

对任何一个小于0的数,对其进行0向取整和-∞取整,取整方向是相反的,故取模不等价于取余
  • 结论:

两个同符号数据参与取余,取模等价于取余,不同语言余数相等

两个不符号数据参与取余,取模不等价于取余,余数大小需考虑语言取整规则

C语言符号-取余\取模运算相关推荐

  1. 取余,模运算,余数的正负问题,1497. 检查数组对是否可以被 k 整除

    首先,我们来看数学中对余数的定义 0到除数之间的整数,所以当除数是负数的时候,余数也是负数. 举个例子: 接下来,我们看计算机中余数是怎么求的??? 所有的语言和计算器都遵循了让商靠近零的原则 在C+ ...

  2. C语言中四种取整方式、取余/取模的运算以及负数取模的问题

    零向取整.负无穷向取整.正无穷向取整.四舍五入取整 如果将一个浮点数赋值给整形,只会保存整数位: 这种取整方式为零向取整,C语言默认采用的是这种方式 C语言中也有对应的零向取整函数: 同理还有一种函数 ...

  3. 深度理解取余/取模运算

    日常编程经常会接触到取余/取模运算,那么计算机中取余/取模运算究竟是怎么定义的? P1:四种"取整"方式 数学取整 1.1 向0取整 parseInt() 注意接受参数是strin ...

  4. 【C语言】深度理解 负数取余 取模

    C语言深度理解 负数取余 取模 关于取余和取模的问题 定义 取余时有负数怎么计算? 取余和取模的区别 取余和取模时候等价什么时候不等价 总结 关于取余和取模的问题 许多小伙伴在刚开始学C语言的时候,知 ...

  5. C#练习——窗体实现简单计算器,完成加,减,乘,除,取余,简单运算

    c# windows窗体练习:实现简单计算器,完成加,减,乘,除,取余,简单运算 //编写环境:vs2017 using System; using System.Collections.Generi ...

  6. python的取整和取余_python取余取整

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 取余的公式:余数=除数-被除数*商python的的余数是按照整除(向下取整)得到 ...

  7. Java 水仙花数(取余%取整/)

    水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身.例如:1^3 + 5^3+ 3^3 = 153. public class Flower {public static void ...

  8. 蓝桥杯算法训练之数对(取余取整)

    问题描述 编写一个程序,该程序从用户读入一个整数,然后列出所有的数对,每个数对的乘积即为该数. 输入格式:输入只有一行,即一个整数. 输出格式:输出有若干行,每一行是一个乘法式子.(注意:运算符号与数 ...

  9. python基础知识之整除、取余、幂运算

    数字和表达式 python解释器可以当作计算器使用 >>>2+2 4 整数除法 一个整数被另一个整数除,计算结果的小数部分被截去,只保留整数部分. 如果参与除法的两个数中有一个为浮点 ...

最新文章

  1. 零基础python必背代码-编程零基础应当如何开始学习 Python?
  2. shell中的PS命令的含义
  3. VTK:小部件之HoverWidget
  4. 集合竞价如何买入_世界上最稳健的抓涨停方法“10分钟集合竞价”选股诀窍,买入直接稳赚10个点,赚到笑...
  5. 【字符编码系列】常用的几种字符编码(GBK,UTF-8,UTF-16)
  6. delphi官方iso下载地址
  7. 那么多北漂程序员,到了35岁以后该怎么选择往后的路?
  8. 移动端border-radius绘制圆点不圆
  9. 啊哈添柴挑战1222输出菱形C++
  10. PS混合模式图文详解
  11. dedecms 对不起,你输入的参数有误修改
  12. java正则表达式练习
  13. 电磁离合器线圈绕线机
  14. Android中定位功能的判断与打开
  15. 腾讯云iis8.5新建网站无法访问_如何建立自己的网站(零基础小白教程一)
  16. STM32H743 SOEM EtherCAT基于STM32H743芯片和SOEM的EtherCAT主站源码
  17. 函数式编程的几点建议
  18. 【微信小程序】app.js 设置全局默认分享(onShareAppMessage)
  19. 957 N 天后的牢房
  20. 一份C++学习资源,咬牙切齿地好用呀

热门文章

  1. 华为eNSP模拟器 AC控制器+AP组网配置
  2. oracle数据库登录日志怎么查询,如何查询Oracle数据库的操作日志
  3. 小学计算题一次大满足
  4. C++函数指针的三种定义方法
  5. 九宫格抽奖源代码php,原生javascript实现九宫格抽奖效果代码
  6. win7如何在登陆界面隐藏一个账户
  7. 鸿蒙和小米和魅族,拒绝华为鸿蒙后,中兴给出新选择,魅族小米坐不住了
  8. 【STM32】ESP8266 WiFi模块实时上报温湿度及控制LED灯项目笔记
  9. 别人电脑连不上我的swagger,自己能连
  10. SAP接口调用公共方法