【C除法和取余】除法和负数取余你真的会了吗?
细节决定成败
我们知道数学中的除法和编程中的除法是不一样的,编程中的除法是取整,那么今天我们就聊聊关于"取整"这件事. 文章目录
除法(取整方式)
1.? 向0取整
我们编程中最常见的取整方式就是向0取整 画个数轴你就明白了
printf("%d\t%d\n",-7/2,7/2);
结果不出所料:
通过这个:你就可以在编程中快速求出一个数的除数:先算出数学除法值,然后再向0取整就可以了
2.?trunc函数
- 功能和编程中的除法一样就是向0取整
- 引用头文件#include<math.h>
- 函数的返回值均是double,要强制转换为int 备注:下列函数都要引用头文件#include<math.h>,返回值都是double类型,输出时要强转为int
数轴助记:
使用:
printf("%d\t%d\n", (int)trunc(-3.5), (int)trunc(3.5));//向0取整
3.?向下取整(floor函数)
floor:地板,有‘下’的意思; 数轴助记:
使用:
printf("%d\t%d\n", (int)floor(-3.5), (int)floor(3.5));//向下取整
4.?向上取整(ceil函数)
ceil:天花板,有‘上’的意思; 数轴助记:
使用:
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;
}
运行结果:
以上这些函数的作用:
1.比如你是一名运动员,你在写这个的年龄的时候,就可以利用这个规则,减小自己的岁数 2.比如你是一名职场管理人士,你在写这个的年龄的时候,就可以利用这个规则,增大自己的岁数
负数取余
下面正数取余没什么特殊的地方,因此我们主要讲讲负数的取余
取余这块就没有像取整一样有那么多函数,但是既然我把取余和取整放一块肯定有特别的意义,快和我一起看看吧!
使用:
printf("%d\t%d\n", -7 % 2, 7 % 2);
//-7/2=-3,余-1
//7/2=3,余1
结果:
最早的取余定义:0<=余数<被除数
但是后来人们发现:(同样是-10%3)
不同的语言,同一个表达式的对取余的结果大相径庭: C语言:-10=-33-1,其中-3是商,-1是余数,是负余数 python:-10=-43+2,其中-4是商,2是余数,是正余数 本质原因的和商有关,也就是和除法的取整方式有关
所以对于求余数的概念有所修订:0<=|余数|<|被除数|
**备注: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)
所以这个无论在平时计算时有更深的理解,而且在实际的编程中理解也会更透彻!
相关文章
- Github下载release附件变相提速方法
- 流程图软件 drawio 免费 github开源
- Git多人协作
- 一文教会你mock(Mockito和PowerMock双剑合璧)
- Go语言性能剖析利器--pprof实战
- Linux内存泄露案例分析和内存管理分享
- 通过linux-PAM实现禁止root用户登陆的方法
- Linux策略路由详解
- 理解virt、res、shr之间的关系(linux系统篇)
- oracle学习笔记(十六) PL/SQL 异常和goto语句
- Linux云主机安全入侵排查步骤
- PHP官方框架 Zend Framework 2.1 发布
- PHP 5.4 内置Web服务器使用说明
- 一个小巧的PHP防注入类
- PHPCMS后台入口地址隐藏方法
- 在Linux中将目录压缩打包为zip文件 并通过ftp上传的Shell脚本
- 用PHP解析XML为数组的方法
- 一段经典的抽奖算法 for PHP版
- 在Linux中用Shell脚本完成SVN版本库的建立
- PHPCMS V9无法正常通过QQ登录的解决方案