java负数取余运算规则,负数如何取模
## Java模数(%)运算
【上一篇】(3359 yebukong.com/article/1101070795486109697.html上一篇)提到了java模具中负数的问题,因为我注意到这种理解有失偏颇。
# # #简介
模运算,应该已经用上了。我之前简单的理解是小学学过余数运算。查阅了一些资料,发现自己的理解出现了偏差。在这里发布维基百科的介绍:
除法(也称模、模运算、模运算等。英文:modulo有时也叫模数))是一个数除以另一个数得到的余数。
给出两个正整数。被除数A和除数N,amod ulon(简称amodn)除以足够多的电灯泡得到a/n余数。比如计算公式‘5 mod 2’可以得到1。2=2.1 (5除以2的商2剩余1。而‘9模3’是93=3.0;注意:如果用电脑来分,如果分不均匀,就拿不到一件商品。例如,您可以得到一个十进制数,如52=2.5。
通常,a和n是整数,但许多计算系统允许其他类型的数字运算,如* *模浮点数* *。整数n的结果范围是0到n1(amod1总是0;Mod 0未定义,这可能会导致编程语言中的零除法错误)。*当a和n都是负数时,通常的定义不适用,结果的处理因编程语言而异。**
可见编程语言中的模具操作和小学里的并不完全一样。它扩展了数学模块(在我小学记忆里),扩展到浮点数和负数。所以* *模运算的结果是负的。* *还说明了不同语言的处理会导致不同语言的模具结果不一致。
# # #整形方法
在了解模运算的过程之前,我们先来看看模运算的区别。如果余数不为0,取整数(/)有几种不同的方法。
-* *附加安装* *
取最接近方向精确值的整数,即取比实际结果略大的最小整数,也称Ceiling。比如‘17/10=2’、‘5/2=3’、‘9/4=-2’;
-* *向下舍入* *
取-方向上最接近正确值的整数,即略小于实际结果的最大整数,也称为下限调整。比如‘17/10=1’、‘5/2=2’、‘9/4=-3’;
-* *从零开始取一个整数* *
取0方向最接近精确值的整数,换句话说,截断小数部分,也称为截断,例如,(17/10=1),(5/2=2),(-9/4=-2)
# # #负面模具验证
根据不同的编程语言,复制操作包括truncate(截断除法)和floored(浮点)。舍位除法用于向上舍入到零,舍位除法用于向上舍入到向下。使用JAVA truncate,Python使用floor。看看这个:
- JAVA
` ` ` java
system . out . println(5% 3;//2
system . out . println(3% 5;//3
system . out . println(-5% 3;//-2
system . out . println(5%-3;//2
``````
在线分析
` 5%3=5-trunc(5/3) *3=5 - 1*3=5-3=2)
` 3%5=3-trunc(3/5) *5=3 - 0*5=3-0=3
`-5% 3=-5-trunc(-5/3)3=-5-(-3))3=-5-(-3)=-2
` 5%-3=5-trunc(5/-3)(-3)=5-(-3)=5-(-3)=2).
-蟒蛇
` ` ` python
打印5% 3;# 2
打印3% 5;# 3
打印-5% 3;# 1
打印5%-3;#-1
``````
在线分析
` 5%3=5层(5/3) *3=5 - 1*3=5-3=2)
` 3%5=3层(3/5) *5=3 - 0*5=3-0=3
`-5% 3=-5-floor(-5/3)3=-5-(-6)(3=-5-(-6)=1)))))))))).
` 5%-3=5层(5/-3 ) )-3 )=5- ) (-2 ) (-3 ) (=5-6=-1).
# # #浮点数的调制
获取浮点数的方法和计算整数的方法是一样的,但是Java有另外一个问题。* *精确度* *
` ` ` java
system . out . println(5.3% 3;//2.3
system . out . println(3% 5.3;//3.0
system . out . println(5.3% 3.2;//2.099999999996
``````
分析
` 5.3% 3=5.3-trunc(5.3/3)* 3=5.3-1 * 3=5.3-3=2.3
` 3% 5.3=3-trunc(3/5.3)* 5.3=3-0 * 5.3=3-0=3
` 5.3% 3.2=5.3-trunc(5.3/3.2)* 3=5.3-1 * 3.2=5.3-3.2=2.1
当我们在某种情况下看浮点数的模时,就会出现精度的问题。这里推荐使用java.math.BigDecimal类的操作。此外,选择publicbigdecimal(stringval)作为结构方法,选择“publicbigdecimal”作为特定模具。
` ` ` java
bigdecimal x=bigdecimal . value of(5.3;
bigdecimal y=bigdecimal . value of(3.2;
bigdecimal[]z=x . divideandreminder(y;
system . out . println(z[0];//1
system . out . println(z[1];//2.1
``````
为什么精度会丧失?又是一个漏洞。
# # #参考链接
https://zh.wikipedia.org/wiki/修改器
33559 www。建C1 a5 ACD 31
blog.csdn.net/zhige 3359号/文章/详情/80980566
:博客:
-
本文由【自由生活】(3359yebukong.com自由生活’)【创意签名4.0国际许可协议】(3359创意commons.org/licenses/by/4.0/)创作
本文论述:[https://yebukong.com/article/1101707715186593793.html](https://yebukong.com/article/110170151865186593793.11113
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。