C语言符号-取余\取模运算
目录
前言
取整
向0取整
向-∞取整
向+∞取整
四舍五入取整
汇总
取模\余
对于正数取模
对于负数取模
取余和取模的理解
前言
本文主要讲解并真正理解取余\取模运算是怎样的!
取整
首先取整有四种类型:
- 向0取整
- 向-∞取整
- 向+∞取整
- 四舍五入取整
向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取整
- 示例:
#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;
}
向-∞取整
- 示例:
#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语言符号-取余\取模运算相关推荐
- 取余,模运算,余数的正负问题,1497. 检查数组对是否可以被 k 整除
首先,我们来看数学中对余数的定义 0到除数之间的整数,所以当除数是负数的时候,余数也是负数. 举个例子: 接下来,我们看计算机中余数是怎么求的??? 所有的语言和计算器都遵循了让商靠近零的原则 在C+ ...
- C语言中四种取整方式、取余/取模的运算以及负数取模的问题
零向取整.负无穷向取整.正无穷向取整.四舍五入取整 如果将一个浮点数赋值给整形,只会保存整数位: 这种取整方式为零向取整,C语言默认采用的是这种方式 C语言中也有对应的零向取整函数: 同理还有一种函数 ...
- 深度理解取余/取模运算
日常编程经常会接触到取余/取模运算,那么计算机中取余/取模运算究竟是怎么定义的? P1:四种"取整"方式 数学取整 1.1 向0取整 parseInt() 注意接受参数是strin ...
- 【C语言】深度理解 负数取余 取模
C语言深度理解 负数取余 取模 关于取余和取模的问题 定义 取余时有负数怎么计算? 取余和取模的区别 取余和取模时候等价什么时候不等价 总结 关于取余和取模的问题 许多小伙伴在刚开始学C语言的时候,知 ...
- C#练习——窗体实现简单计算器,完成加,减,乘,除,取余,简单运算
c# windows窗体练习:实现简单计算器,完成加,减,乘,除,取余,简单运算 //编写环境:vs2017 using System; using System.Collections.Generi ...
- python的取整和取余_python取余取整
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 取余的公式:余数=除数-被除数*商python的的余数是按照整除(向下取整)得到 ...
- Java 水仙花数(取余%取整/)
水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身.例如:1^3 + 5^3+ 3^3 = 153. public class Flower {public static void ...
- 蓝桥杯算法训练之数对(取余取整)
问题描述 编写一个程序,该程序从用户读入一个整数,然后列出所有的数对,每个数对的乘积即为该数. 输入格式:输入只有一行,即一个整数. 输出格式:输出有若干行,每一行是一个乘法式子.(注意:运算符号与数 ...
- python基础知识之整除、取余、幂运算
数字和表达式 python解释器可以当作计算器使用 >>>2+2 4 整数除法 一个整数被另一个整数除,计算结果的小数部分被截去,只保留整数部分. 如果参与除法的两个数中有一个为浮点 ...
最新文章
- 零基础python必背代码-编程零基础应当如何开始学习 Python?
- shell中的PS命令的含义
- VTK:小部件之HoverWidget
- 集合竞价如何买入_世界上最稳健的抓涨停方法“10分钟集合竞价”选股诀窍,买入直接稳赚10个点,赚到笑...
- 【字符编码系列】常用的几种字符编码(GBK,UTF-8,UTF-16)
- delphi官方iso下载地址
- 那么多北漂程序员,到了35岁以后该怎么选择往后的路?
- 移动端border-radius绘制圆点不圆
- 啊哈添柴挑战1222输出菱形C++
- PS混合模式图文详解
- dedecms 对不起,你输入的参数有误修改
- java正则表达式练习
- 电磁离合器线圈绕线机
- Android中定位功能的判断与打开
- 腾讯云iis8.5新建网站无法访问_如何建立自己的网站(零基础小白教程一)
- STM32H743 SOEM EtherCAT基于STM32H743芯片和SOEM的EtherCAT主站源码
- 函数式编程的几点建议
- 【微信小程序】app.js 设置全局默认分享(onShareAppMessage)
- 957 N 天后的牢房
- 一份C++学习资源,咬牙切齿地好用呀