取模运算理解

作者: 蜗牛写java | 来源:发表于2020-01-09 12:57 被阅读0次

取模运算

背景

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

取模和取余的区别

  • 取余运算 在计算商值时 商值向0方向舍入;靠近0原则
  • 取模运算 在计算商值时 商值向负无穷方向舍入;尽可能让商值小的原则(不超多商值的最大值)

计算步骤

假设有整数a和b,那么取模/取余运算可以分为两步运算:

  1. 求整数商:c = a/b;
  2. 计算模/余数:r = a - (c*b);
  3. 总计算模/余数:a mod b = a - b[a/b] ([a/b]表示整数商)

例子

取模

简述 商值 取模值
5 mod 3 = 2 5/3 = 1.66 商取小原则 商=1 5 - 3 * 1 = 2 2
-5 mod 3 = 1 -5/3 = -1.66 商取小原则 商=-2 -5 - (3 * -2) = 1 1
5 mod -3 = -1 5/-3 = -1.66 商取小原则 商=-2 5 - (-3 * -2) = -1 -1
-5 mod -3 = -2 -5/-3 = 1.66 商取小原则 商=1 -5 - (-3 * 1) = 2 -2

取余

简述 商值 取余值
5 rem 3 = 2 5/3 = 1.66 商靠0原则 商=1 5 - 3 * 1 = 2 2
-5 rem 3 = -2 -5/3 = -1.66 商靠0原则 商=-1 -5 - (3 * -1) = - 2 -2
5 rem -3 = 2 5/-3 = -1.66 商靠0原则 商=-1 5 - (-3 * -1) = 2 2
-5 rem -3 = -2 -5/-3 = 1.66 商靠0原则 商=1 -5 - (-3 * 1) = - 2 -2

java 中 % 是取余运算;Python中 % 是取模运算

模的理解

“模”是指一个计量系统的计数范围;如时钟,12个整点为计算范围,则模为12;计算机也是一个计量机器,模为32位或者64位;

32位计算机正常理解 在模 范围内能表达的 有 [0, 2³²-1];那么负数该怎么表达呢,所以出现了补码;也就是 正数 + 负数 正好达到模的溢出阀值2³²;所以在计算机中负数是用补码方式表达的原因;

关于补码的例子:在12模的时钟中;假设当前时针指向10点,而准确时间是6点,调整时间可有以下两种拨法

  1. 倒拨4小时,即:10-4=6 (10-4) mod 12 = 6
  2. 顺拨8小时:10+8=12+6=6 (10+8)mod 12 = 6

在以12模的系统中,加8和减4效果是一样的;因此凡是减4运算,都可以用加8来代替。对“模”而言,8和4互为补数。实际上以12模的系统中11和1、10和2、9和3、7和5、6和6都有这个特性;共同的特点是两者相加等于模

“取模”实质上是计量器产生“溢出”的量,它的值在计量器上表示不出来,计量器上只能表示出模的余数(取模);任何有模的计量器,均可化为加减法运算

5 mod 3 = 2 例子中;模 为 3;2 为取模的值

计算机中取模应用思想

取模的本质是:取模的值,必定会模的范围内;所以,计算机领域引用该特性,使元素路由算法不超出边界,并有规则存放。

首先确定模(范围);元素取模,使元素有规则的落入模的范围内容器中

如:hashMap、数据库分表、分布式节点路由算法等

参考文档:<原码, 反码, 补码 详解>

相关文章

  • 取模运算理解

    取模运算 背景 取模运算(mod)和取余运算(rem)两个概念有重叠的部分,但又不完全一致;主要区别在于对负整数进...

  • java 中的除法与取余

    一、取余?取模? 首先区别一下取模运算(Modulo Operation)和取余运算(Complementatio...

  • Dart语法学习(二)

    Dart(二) 一. 运算符 1.1. 除法、整除、取模运算 我们来看一下除法、整除、取模运算 1.2. ??=赋...

  • 《Java编程的逻辑笔记3》--基本运算

    算术运算 算术运算符有加减乘除,符号分别是+-*/,另外还有取模运算符%,以及自增(++)和自减(–)运算符。取模...

  • (2)shell脚本编程进阶之运算和循环语句

    (一)算术运算 (1)bash 中的算术运算: help let +, -, *, /, % 取模(取余), **...

  • [Flutter] 04-Dart语法二

    一. 运算符 1.1. 除法、整除、取模运算 我们来看一下除法、整除、取模运算 1.2. ??=赋值操作 dart...

  • bash中的运算

    算术运算 bash中的算术运算:help let  +,-,*,/,%取模(取余),**(乘方) 实现算术运算:l...

  • PHP中常用的运算符 -- PHP 学习 (三)

    运算符 算术运算符 加法 '+' 减法 '-' 乘法 '-' 除法 '/' 取模 '%': 取余数 赋值运算符 赋...

  • 3. 运算符

    取模% 幂运算2**12 除运算10/3只取整数部分10//3 比较运算 赋值运算 =+=-= 逻辑运算 从左往右...

  • 运算符

    算数运算符 + - * / %(模、取余) ...

网友评论

    本文标题:取模运算理解

    本文链接:https://www.haomeiwen.com/subject/nnjyactx.html