发信人: hunter__fox(雁回西楼)
整理人: gzwsh(2004-05-06 16:40:17), 站内信件
|
Mod需要对整个数进行模运算,在汇编级上去看,它是将一个数(二进制)与模数(二进制)从高位对齐相减,如果有某个位不够减,就进行加操作(不是标准的加,是将模数的反码的补码加上去)。。。直到目标数不够减为止。
很明显这是一个循环,运算需要的CPU时间与目标数和模数的大小成正比。
BitAnd的方式,将会使用两个寄存器来存储数,并且对每个位(bit)都进行比较。这位的速度是比较快的,因为寄存器里的比较只需要一个时间单元(第二个寄存器里只有低位是1)
使用and表达式,同样只是返回一个位的结果,但计算上就比BitAnd多一些,它需要对两个寄存器里的两个数进行逻辑运算,但结果上只使用其中的一个位,这个从字节里提取位的操作也需要CPU时间,所以比BitAnd慢。但是,它是没有使用函数的,汇编中没有JUMP或者JZ/JNZ之内的动作,不需要在内存块里进行不必要的寻址,因此在大量的此类操作中也有一定的优势。
最大的优点在于,这种写法很简单,运算也快,如果将明了看作性能,速度看作价值,它算是性价比很好的写法,Bitand方式算是价最优,Mod方式算是性能最好了。
【 在 tonycl 的大作中提到:】
:?
:
:能说明一下原理吗?
:【 在 hunter__fox 的大作中提到:】
::就这样,比mod快,既使系统有判断奇偶的函数,也是这种做法,大不了是仅比较最低位,那就得用BitAnd,但对函数的调用浪费的时间不见得能比直接逻辑处理所节约的时间少。
:
:......
---- 作者:hunter__fox【雁回西楼】
来源:网易虚拟社区广州站 VFP版 |
|