谢谢老马……知道怎么回事了,你的做法是直接让myIntegerArr真数组的地址指向mylong的地址,所以直接对mylong赋值就可以取得了,而我的是copy了mylong的值……
------解决方案--------------------没错.
其实在C语言里就没这么麻烦,因为直接就可以定义union,VB6里由于没有原生提供这个特性,只能绕个大弯了
由于没有任何运算过程,性能当然是最好的.
------解决方案--------------------
先不说zGetLngHigh()与GetHiWord()的区别.
你大概还没看我的代码吧
------解决方案--------------------可能没看清楚代码吧!直接赋值跟计算不是一个级别的!还是支持老马……
------解决方案--------------------楼主没发现我的代码与老马的代码的区别吗?我的每次都需要copymemory,但是老马的只需要一次,以后不管你执行几千万还是几亿次都不需要再copymemory了,因为他们的地址共用了……
------解决方案--------------------当然,如果楼主你有更好的代码,希望可以共享一下……
------解决方案--------------------
好吧,我只是提供一个方案,没想到还被你BS一顿,真是对不起了
------解决方案--------------------酷心的函数由于全是使用的位运算符,CPU中直接就有相应的数学指令,编译后应该是CPU的直接运算,使用的应该也是CPU的内部缓存.
展开与不展开的区别主要还是在函数调用的开销上,调用函数时涉及到内存的操作的话,内存速度肯定没CPU内部缓存快.
而我的模拟UNION方案主要是内存复制,并未使用运算符,编译后就应该是一堆的MOV指令,完全是基于内存的.
那么这两种方案谁快谁慢是与具体电脑有关的.
如果CPU强大,那么酷心的方案应该会更快.
如果CPU不是很强,但内存频率高的话,就应该是模拟UNION快了.
------解决方案--------------------
使用数组做指针的时候,不就使用copymemory了?
------解决方案--------------------
Public Function HiWord(ByVal DWord As Long) As Integer
HiWord = (DWord And &HFFFF0000) \ &H10000
End Function
扯远了吧。
要满足楼主的要求,仅需非常简单的函数。
再想快一点,直接写表达式,省去函数调用的栈操作。
------解决方案--------------------
可以更简单:
Public Function HiWord(ByVal DWord As Long) As Integer
HiWord = DWord \H10000
End Function
------解决方案--------------------
你以为 Long 是无符号整数啊!用 &HFFFFFFFF 试试,结果多少?
------解决方案--------------------