模运算系统与补码

1. 什么是模运算系统?

我在网上查的资料,说模运算系统属于代数中环的概念,但是我只学过微积分、线性代数这些基本的数学而且掌握的一般,对于代数中的群域环也只是听过但不曾了解。

因为关于代数学的那些资料我实在是看不懂,下面,我就按照我的理解来给他下一个定义,很有可能不严谨甚至是不对,但是对于帮助我在学习计算机系统中的补码概念时的理解理解能自圆其说。我说的不对的地方还请斧正!

钟表是我们最常见的模运算系统之一,他有12个小时,满12小时就会回到最小值0。

因此,我们不妨将其抽象成,一个代数系统中只有0、1、2、3、…、11这12个数,对于所有不在这12个数中的数都要用这12个数表示,那怎么表示呢?就用到“环”了(这里的环只是我个人的理解不是代数概念中的环!),我们先来看看0-11这11个数意味着什么?对于0,相当于我们划了一个圆站在其中的一个点(记为原点),那么对于1呢?就相当于从原点出发沿着顺时针方向走了圆环周长的1/12,对于2便是从原点出发沿着顺时针方向走了圆环周长的2/12,因此,13这种不在0-11中的数字我们可以理解成从原点出发沿着顺时针方向走了圆环周长的13/12,便是数字1所在的位置,于是就有在模12(总共有12个数)的模运算系统中1和13是等价的。

再抽象一些,上面的一大段话我们可以用一个式子来表达

1
A=B+K×M K∈Z

对于任意一个不在模运算系统中可以直接表达的数字A(如上文的13这种),若能找到一个在模运算中可以直接表达数字B,有上式成立,则A与B在模为M的模运算系统中等价。而K的值我们可以理解成我们沿着圆环走了多少圈。模M为运算系统中数字的个数,上例中M=12。

2. 将减法变成加法

这里我们只考虑两个在模运算系统中可以直接表达的数字之间的减法,我们接着上面的例子说比如8-2,我们都知道等于6,那如何用加法来表示呢?那么问题就变成了8+?=6,我们知道在模12的模运算系统中6和18(12+6)是等价的(就是多走一圈嘛),因此这里的就可以等于10。

P.S. 如果要求也是模运算系统中可以直接表达的数字且做加法,那么他应该是唯一的,否则不唯一。

那么我们如何快速的知道就是加10呢?可以这么想,-2就是逆时针走两个单位,那么总共是12单位,我顺时针走当然走12-2=10个单位。

3. 模运算系统在补码中的应用

我们常见的计算机都是32位或者64位的,这里的多少位就是2进制的位数,我们考虑简单些,如果是4位的,那么可以表示24=16个数,又因为如果做加法得到的结果需要5位来表示,但只有4位,会自动舍掉最高位(相当于计算结果除以24后的余数),因此是模为24的模运算系统。

在模运算系统中从0000-1111每个数都可以对应无数个数,为了唯一对应,我们规定0000为0,其余0打头的为正数,1打头的为负数,因此他能表示的数的范围为 [-23,23),类似的,n位能表示的数的范围为[-2n-1,2n-1)。