对取模后余数的理解

 

转自:对取模后余数的理解

 

取模和取余   

通常情况下,取模运算(MOD)和取余运算(REM)被混为一谈,因为在大多数的编程语言里,都用" % " 符号来表示取模运算或者取余运算。所以有必要编写本文档,来为在此环节遇到问题的程序员理清思路,同时也提醒各位需要注意在不同编程语言环境下" % " 运算符的具体意义,因为在有负数存在的情况下,两者的结果是不一样的。

 

首先,我们需要区分两者的概念。

         取模(MOD):

给定一个正整数p,任意一个整数n,一定存在等式 :

n = k * p + r ;

其中 k、r 是整数,且 0 ≤ r < p,则称 k 为 n 除以 p 的商,r 为 n 除以 p 的余数。

对于正整数 p 和整数 a, b,定义如下运算:

取模运算:a % p(或a mod p),其结果表示a除以p的余数。

模p加法: 其结果是a + b算术和除以p的余数。

模p减法: 其结果是a - b算术差除以p的余数。

模p乘法: 其结果是 a * b算术乘法除以p的余数。

         取余(REM):

给定一个正整数p,任意一个整数n,一定存在等式 :

n = k * p + r ;

其中 k、r 是整数,且 0 ≤ r < p,则称 k 为 n 除以 p 的商,r 为 n 除以 p 的余数。

         取余运算:是指希望一个较小的数除以另一个较大的数,从而获得的不够除的部分就是余数,就是取余运算的结果。

 

接下来,需要说明的是,取模运算(“Modulo Operation”)和取余运算(“Remainder Operation”)两者概念虽有重叠的部分但又不完全一致。主要的区别在于对负整数进行除法运算时操作不同。取模运算主要是用于计算机术语中。取余运算则更多是数学概念。模运算在数论和程序设计中都有着广泛的应用。

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

1.求 整数商: c = a / b;

2.计算模或者余数: r = a - c * b.

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

因此,当a和b符号一致时,取模运算和取余运算所得的c的值一致,因此结果一致。但是当符号不一致的时候,结果不一样。

具体来说,取模运算结果的符号和b一致,取余运算结果的符号和a一致。

在C语言中,%符号表示的是取余运算,在python脚本中,%表示的是取模。

(通常取模运算中b不允许是负数,但是在python 2.5.1里可以在%后面跟负数,因为python语言中除法的结果是向0舍入,因此计算结果是取模!)

 

Example:

例如:计算-7Mod 4

那么:a = -7;b = 4;

第一步:求整数商c,如进行取模运算c = -2(向负无穷方向舍入),取余c = -1(向0方向舍入);

第二步:计算模和余数的公式相同r = a - c * b ),但因c的取值不同,取模时r = 1,取余时r = -3。

 

倘若读者已经了解并掌握了两者的区别,也就能很好的理解:“当我们赋值给一个无符号类型,一个超出它表示范围的值时,结果是初始值对无符号类型表示数值总数取模后的余数。”这句话。

         例如, 8比特大小的unsignedchar 可以表示0 至 255 区间内的值,如果我么赋值给此类型变量一个区间以外的值,则实际的结果是该值对256取模后所得的余数。因此, 把 -1 赋值为8比特大小的unsignedchar 所得的结果是255.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要修改PCTOL取模软件8x8,需要进行以下步骤: 1. 首先,打开PCTOL取模软件的源代码文件,通常为.c或.cpp文件。可以使用文本编辑器(如Notepad++、Sublime Text或Visual Studio Code)或集成开发环境(如Dev-C++、Code::Blocks或Visual Studio)来打开该文件。 2. 在源代码文件中,找到涉及8x8取模功能的部分。通常会包含相关的函数或方法,可能会使用数组或矩阵来表示8x8图像。 3. 理解当前的取模算法和实现方式。可能是使用除法、位运算或其他算法来计算余数。查看相关的代码逻辑和算法来确保自己对其有所了解。 4. 根据需要,修改取模算法。可以尝试使用其他的取模算法来改进性能或结果精度。参考相关的数学算法和模运算来进行修改。 5. 重新编译源代码文件,以生成新的可执行文件或库文件。根据使用的开发环境,可能需要进行一些配置或设置来确保正确编译。 6. 使用修改后的PCTOL取模软件进行测试和验证。输入一些测试用例,检查新的算法是否能够正确计算8x8的取模结果。比较修改前后的结果,并确保修改后的算法能够符合预期的要求。 7. 如有需要,对修改进行进一步优化或调整。通过分析算法的时间复杂度和空间复杂度,可以尝试进行一些性能优化或调整参数,以达到更好的效果。 8. 最后,保存修改后的源代码文件,并将新的可执行文件或库文件用于实际应用或分发给其他用户,确保新的取模算法可以得到广泛应用和使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值