回复 3楼 diycai
你试试看
程序代码:
Public Function CountOne3(cs As Long) As Long
Dim k As Long
Dim j As Long
Dim f(0 To 3) As Byte
CopyMemory f(0), cs, 4 '复制到byte数组中
For k = 0 To 3 '针对每个byte进行判断
Select Case f(k)
Case 0
Case 1, 2, 4, 8, 16, 32, 64, 128
j = j + 1
Case 3, 5, 6, 9, 10, 12, 17, 18, 20, 24, 33, 34, 36, 40, 48, 65, 66, 68, 72, 80, 96, 129, 130, 132, 136, 144, 160, 192
j = j + 2
Case 7, 11, 13, 14, 19, 21, 22, 25, 26, 28, 35, 37, 38, 41, 42, 44, 49, 50, 52, 56, 67, 69, 70, 73, 74, 76, 81, 82, 84, 88, 97, 98, 100, 104, 112, 131, 133, 134, 137, 138, 140, 145, 146, 148, 152, 161, 162, 164, 168, 176, 193, 194, 196, 200, 208, 224
j = j + 3
Case 15, 23, 27, 29, 30, 39, 43, 45, 46, 51, 53, 54, 57, 58, 60, 71, 75, 77, 78, 83, 85, 86, 89, 90, 92, 99, 101, 102, 105, 106, 108, 113, 114, 116, 120, 135, 139, 141, 142, 147, 149, 150, 153, 154, 156, 163, 165, 166, 169, 170, 172, 177, 178, 180, 184, 195, 197, 198, 201, 202, 204, 209, 210, 212, 216, 225, 226, 228, 232, 240
j = j + 4
Case 31, 47, 55, 59, 61, 62, 79, 87, 91, 93, 94, 103, 107, 109, 110, 115, 117, 118, 121, 122, 124, 143, 151, 155, 157, 158, 167, 171, 173, 174, 179, 181, 182, 185, 186, 188, 199, 203, 205, 206, 211, 213, 214, 217, 218, 220, 227, 229, 230, 233, 234, 236, 241, 242, 244, 248
j = j + 5
Case 63, 95, 111, 119, 123, 125, 126, 159, 175, 183, 187, 189, 190, 207, 215, 219, 221, 222, 231, 235, 237, 238, 243, 245, 246, 249, 250, 252
j = j + 6
Case 127, 191, 223, 239, 247, 251, 253, 254
j = j + 7
Case 255
j = j + 8
End Select
Next k
CountOne3 = j
End Function
运行是编译后运行,为什么写到1亿次呢,实在是方法一用时太短。
运行时间结果
循环调用10000000次,计时间
方法一用时:0.28125(我一楼的代码)
方法二用时:19.70313(转八进制,然后比较字符串的速度)
方法三用时:12.48438(这楼的代码)
[此贴子已经被作者于2021-9-12 21:49编辑过]