【发布时间】:2014-04-07 08:37:54
【问题描述】:
我有一段代码类似于(vb.net 或 c#“语言”无关紧要):
Dim Counter As BigInteger = 0
Serial = BigInteger.DivRem(Serial, 4, Counter)
CountersList.Add(CInt(Counter))
由于我用非常大的正整数(几百位数)将其中的许多除以 4,并且在收到一些“内存不足异常”后,我又去阅读了文档。
在移位运算符page 中,我可以阅读: “不支持自定义运算符的语言可以通过乘法执行按位左移操作 BigInteger.Pow(2, shift) 的值。"
所以我认为上面的代码也许可以改进这种方式(明确表示我除以 2 的幂):
Dim Counter As BigInteger = 0
Serial = BigInteger.DivRem(Serial, BigInteger.Pow(2, 2), Counter)
CountersList.Add(CInt(Counter))
我的问题。
一般来说,显式使用 BigInteger.Pow() 是否有任何优势,以便 (?) 编译器知道它可以执行移位,而不是乘法/除法?
在我的具体情况下,我需要除以 4,并得到结果和余数,最好的方法是什么?
【问题讨论】:
-
IIRC,
Pow对负数的作用不同。
标签: c# vb.net biginteger integer-division bit-shift