java负数取余运算规则,负数如何取模

  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

java负数取余运算规则,负数如何取模