Java 取余运算符 % 实例测试与探究

1 问题:

遇到一个 -1%5 等于 1 还是 -1 的问题,通过查阅资料解决了该问题,并对 Java 取余运算符 % 有了深入的了解。

2 观察以下运算实例:

package com.sjmp;


/**
 * @author: sjmp1573
 * @date: 2020/12/29 21:06
 * @description:
 */

public class Test {
    public static void main(String[] args) {

        System.out.println(" 2% 3 = " + ( 2% 3) );
        System.out.println(" 2%-3 = " + ( 2%-3) );
        System.out.println("-2% 3 = " + (-2% 3) );
        System.out.println("-2%-3 = " + (-2%-3) );
        System.out.println(" 3% 2 = " + ( 3% 2) );
        System.out.println(" 3%-2 = " + ( 3%-2) );
        System.out.println("-3% 2 = " + (-3% 2) );
        System.out.println("-3%-2 = " + (-3%-2) );

    }
}

运算结果如下:

 2% 3 = 2
 2%-3 = 2
-2% 3 = -2
-2%-3 = -2
 3% 2 = 1
 3%-2 = 1
-3% 2 = -1
-3%-2 = -1

Process finished with exit code 0

分析:

  • 余数的符号与被除数保持一致;
  • 如果需要快速计算,计算的值与去除符号后的运算相同,加上被除数的符号即为结果。

3 Java 中取余运算符 % 探究

取模运算(“Modulus Operation”)和取余运算(“Remainder Operation ”)两个概念有重叠的部分但又不完全一致。主要的区别在于对负整数进行除法运算时操作不同。取模主要是用于计算机术语中。取余则更多是数学概念。

对于整型数 a 和 b 来说, a%b ,取模运算或者求余运算的方法都是:

Step01 求整数商: c = [a/b];
Step02 计算模或者余数: r = a - c*b.

求模运算和求余运算在第一步不同: 取余运算在取商 c 的值时,向 0 方向舍入(fix()函数);而取模运算在计算c的值时,向负无穷方向舍入(floor()函数)。

例如计算:-7 Mod 4
那么:a = -7;b = 4;

Step01 :求整数商 c,如进行求模运算 c = -2(向负无穷方向舍入),求余c = -1(向 0 方向舍入);
Step02 :计算模和余数的公式相同,但因 c 的值不同,求模时 r = 1,求余时r = -3。

归纳:当 a 和 b 符号一致时,求模运算和求余运算所得的 c 的值一致,因此结果一致。
当符号不一致时,结果不一样。

另外各个环境下 % 运算符的含义不同,比如c/c++,java 为取余,而 python 则为取模。

所以 Java 取余运算规则:a%b = a - (a/b)*b,其中【a/b 为向 0 取整】。

 -1% 5 = -1

Process finished with exit code 0

参考
[1] 百度百科——取模运算
[2] Java中的相除(/)和取余(%)的实现方法
[3]Java中有关负数取余的计算

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值