1)模数的概念
[x]原=1.1011 [x]反=1.0100
模数从物理意义上讲,是某种计量器的容量。例如,我们日常生活中用的钟表,模数就是12。钟表计时的方式是:达到12就从零开始(扔掉一个12),这在数学上是一种”取模(或取余)运算(mod)”。”%”是c++语言中求除法余数的算术运算符。
例如:
如果现在的准确时间是6点整,而你的手表指向8点,怎样把表拨准呢?可以有两种方法:
把表往后拨2小时,或把表往前拨10小时,效果是一样的,即:
8—2=6
(8+10)mod 12=6
在模数系统中:
8—2=(8+10 )mod 12
上式之所以成立,是因为2与10对模数12是互为补数的(2+10=12)。因此,我们可以认可这样一个结论:在模数系统中,一个数减去另一个数,或者说数加上一个负数,等于第一个数加上第二个数的补数:
8+(-2)=8+10(mod 12)
我们称10为-2在模12下的”补码”。负数采用补码表示后,可以使加减法统一为加法运算。
在计算机中,机器表示数据的字长是固定的。对于n位数来说,模数的大小是:n位数全为1,且最末位再加1。实际上模数的值已经超过了机器所能表示的数的范围,因此模数在机器中是表示不出来的。若运算结果大于模数,则模数自动丢掉,也就等于实现了取模运算。
如果有n位整数(包括一位符号位),则它的模数为2”;如果有n位小数,小数点前一位为符号位,则它的模数为2。
[x]原=1.1011 [x]反=1.0100
模数从物理意义上讲,是某种计量器的容量。例如,我们日常生活中用的钟表,模数就是12。钟表计时的方式是:达到12就从零开始(扔掉一个12),这在数学上是一种”取模(或取余)运算(mod)”。”%”是c++语言中求除法余数的算术运算符。
例如:
如果现在的准确时间是6点整,而你的手表指向8点,怎样把表拨准呢?可以有两种方法:
把表往后拨2小时,或把表往前拨10小时,效果是一样的,即:
8—2=6
(8+10)mod 12=6
在模数系统中:
8—2=(8+10 )mod 12
上式之所以成立,是因为2与10对模数12是互为补数的(2+10=12)。因此,我们可以认可这样一个结论:在模数系统中,一个数减去另一个数,或者说数加上一个负数,等于第一个数加上第二个数的补数:
8+(-2)=8+10(mod 12)
我们称10为-2在模12下的”补码”。负数采用补码表示后,可以使加减法统一为加法运算。
在计算机中,机器表示数据的字长是固定的。对于n位数来说,模数的大小是:n位数全为1,且最末位再加1。实际上模数的值已经超过了机器所能表示的数的范围,因此模数在机器中是表示不出来的。若运算结果大于模数,则模数自动丢掉,也就等于实现了取模运算。
如果有n位整数(包括一位符号位),则它的模数为2”;如果有n位小数,小数点前一位为符号位,则它的模数为2。