1.整数的表示
重要结论:任何整数都可以表示为2的不同幂次的和
2,8,16进制与10进制的相互转换
2.整数的计算机运算
对整数的
进制展开(
)可以用如下伪代码描述:
余数部分
商部分
}
整数的加法:



但其实在硬件实现上由于高位的运算必须等待低位的运算完成,延迟时间长,故采用超前进位加法器进行并行运算,其原理如下:

图中乘法表示与,加法表示或

其实相当于通过复杂的硬件,将未知量转为已知量,每一位的运算同时进行,互不干扰,运算时间固定,效率提升。
乘法运算



更高效的算法:


伪代码展示:


以上乘法算法并非最优的方法,更多内容参考https://zhuanlan.zhihu.com/p/63291883
同时在高级语言层面大多数情况不需要考虑位运算的复杂度,同时现代计算机普遍配备着效率极高的乘法器,在机器指令层面可以高效执行,这里仅仅作为一个算法的展示,在程序设计层面,并没有实际意义
除法和取余运算


模指数运算


原文这里写的比较简略,我写一些自己的理解:
由同余的性质,,
转化为二进制数对应的也就是对
通过得知的结果计算出,对应伪代码
power=(power*power)mod m ;
而对于,其二进制表示不一定都为1,所以对于是0的项,要跳过,这也是if语句仅仅在时才执行的意义。


对复杂度的分析如上,感觉mod部分省略了应该是因为两个乘数都小于m,其乘积不会超出m很多,这部分的复杂度就可以忽略了。
3. 运算的复杂度
大O表示法:是一个指定的正整数集合,如果
为取正值的函数,且对所有的
有定义,则如果存在正常数
对所有充分大的
均有
,那么
在
上是
以下是衍生的几个性质:
- 如果
是
的,
是正常数,则
是
的
- 如果
的,
的,则
回顾整数乘法,对a,b有:




本节的算法java实现部分参见:位操作实现四则运算
网友评论