10亿次求余模(余数)就像是解析运行,
PYTHON运行要140秒,
VBS解析每次数据全转成变体类型,要136秒
2026版ARM相当于V8 JS引挚,运行速度达到了1.5秒
和VC++编绎的EXE速度一样了
脚本是这样的,python要140秒,VBS 136秒,这2个效率是真差
脚本就是直接可以代码运行,但PYTHON以前没有编绎EXE功能,可以编绎的速度就提高到1.8秒了,AOT生成静态EXE,.NET CORE这些就是快
Dim START As Long, UsedTime As Long 'VB6代码: Dim i As Long Dim C As Long Dim v As Long v = 10 ^ 9 '10亿 START = timeGetTime For i = 1 To v If i Mod 7 = 0 Then C = C + 1 Next UsedTime = timeGetTime - START Text1.Text = "VB6计算10亿个数里找能被7整数的数字" & vbCrLf & "用时:" & (UsedTime / 1000) & "秒" & vbCrLf & "找到:" & C & "个7的倍数".net代码: Stopwatch clock = new Stopwatch(); clock.Start(); int count = 0; int number = 0; while (number++ < 1000000000) { if (number % 7 == 0) { count++; } } clock.Stop(); Console.WriteLine($"找到${count}个数,耗时{clock.Elapsed}"); Console.Read();关于 VB6 中Mod运算的底层原理 + CPU 指令 完整解答
我直接给你讲最底层、最真实、最准确的原理,不绕弯子:
1. VB6 里的i Mod 7 = 0到底在算什么?
Mod就是求余数:i Mod 7= 整数i除以7之后剩下的余数。
你代码里的逻辑:
vb
If i Mod 7 = 0 Then C = C + 1等价数学含义:判断 i 是不是 7 的整数倍。
2. 底层 CPU 到底用什么指令计算?
答案:
CPU 有专门的除法指令,余数会自动算出来,Mod 就是直接拿这个余数。没有专门叫MOD的指令,但除法指令会同时返回 商 和 余数。
3. 不同 CPU 架构的真实指令
① x86 /x86_64(你电脑现在用的 CPU)
指令:DIV(无符号除法)IDIV(有符号除法)
执行时:
plaintext
被除数 → AX / DX:AX 除数 → 通用寄存器结果:
- 商 → AL / AX / EAX
- 余数 → AH / DX / EDX
VB6 的Long是 32 位有符号整数 → 用IDIVi Mod 7就是直接取IDIV 执行后 EDX 里的值。
② ARM 架构(手机 / 嵌入式)
指令:UDIV/SDIV但 ARM 不会自动返回余数,需要用公式:
plaintext
余数 = 被除数 - 除数 × 商VB6 编译到 ARM 时会自动生成这行计算。
4. 关键结论(最重要)
Mod不是复杂算法,就是 CPU 除法的副产品- 现代 CPU 硬件直接支持求余,速度极快
- VB6 的 Mod 就是直接调用 CPU 除法指令取余数
- 你那行
i Mod 7本质 = 1 条 IDIV 指令
5. 为什么你那 10 亿次循环跑得慢?
不是Mod慢!而是:
- VB6解释执行(不是编译成机器码全速跑)
- 循环本身开销巨大
- 10 亿次迭代在 VB 里本身就极慢
如果是 C++ / 汇编 跑同样逻辑:10 亿次i Mod 7只需要几十毫秒。
6. 超简版总结(方便记忆)
Mod=求余数- CPU没有专门 MOD 指令
- 但 CPU除法指令会自动算出余数
- VB6 的
Mod就是直接拿除法后的余数
最终一句话总结
Mod 运算的核心就是 CPU 除法指令自带的余数,硬件原生支持,速度极快。
如果你愿意,我还能给你:
- 把你这段 VB6 代码优化到 0.1 秒完成(数学公式法,根本不用循环)
- 或者给你看VB6 编译后的汇编指令,亲眼看到
IDIV