为什么一超过 54 就出错呢,该怎么处理
为什么一超过 54 就出错呢变量 S 保存的是及时生成的 2 进制字符串For X as Integer 1 to UBound(S)iVal
为什么一超过 54 就出错呢
变量 S 保存的是及时生成的 2 进制字符串
For X as Integer = 1 to UBound(S)
iVal = iVal + Mid(S, X, 1) * (2 ^ (X - 1))
Next
我用一步步跟踪调试的方法发现只要 X 大于 54 iVal 就出错!即便是我用64个1也是一样出错,谁能告诉我到底是什么原因!怎么解决???????
[解决办法]
如果 Or 、And 等运算的两边都是“整数类”的常数或变量,它就对这两个操作数进行二进制位的“位运算”(每一位都要进行操作),但 + 是数学运算,是要管符号位、进位等相关操作的。位运算就没这些问题。
比如: 1 or 3 =3,但 1 + 3 就是等于4了。
还有(假设16位有符号整数吧) &H3000 or &HF000 = &HF000
但: &H3000 + &HF000 = &H2000