移植c++代码到VBScript,位操作符溢出
Porting C++ code to VBScript, overflow with bitwise operators
我正在尝试将以下c++代码移植到VBScript,但我在尝试使用按位异或运算符时遇到溢出问题。
buffer
是一个整数数组(size = 6)。
ris.ID_OPER = atoi(buffer);
for( i=0; i<=5; i++ )
chk += (unsigned long)(buffer[i]);
chk = chk ^ ris.ID_OPER;
chk = chk & 0xff;
sprintf( buf, "%02X", chk );
VBSCRIPT - CODE
chkbin = Clng(chkbin)
chkbin = 1 Xor 11110001001000000
引发溢出错误(Overflow: '[number: 1,1110001001E+16]')
我认为任何优秀的开发人员都应该知道的溢出是您的数据存储变量在移动后不足以容纳值。一个或多个比特在开始或结束时"掉落",这取决于大二进制或小二进制在"幕后"。尝试CDbl()或货币类型代替Clng()。VB脚本对c++无符号值少了一位,因为它使用有符号的长(一位持有+或-),可能有另一种方法,而不是使用更大的数据类型,看看http://blogs.msdn.com/b/ericlippert/archive/2004/12/03/integer-arithmetic-in-vbscript-part-two.aspx
有符号和无符号的最大值
无符号长。
4294967295
。
2147483647
少1位意味着可用的最大值大约是一半
最后使用CCur(),因为货币也可以保存更大的数字值,并且能够存储比long类型更多的值。
相关文章:
- 对字符串进行位操作
- 对字符数组中的元素执行逐位操作
- 逐位操作的隐式类型转换
- 如何进行特定的位操作?
- C++避免位操作完全移位
- 使用双包装器类进行位操作(C++、clang)修复性能下降问题
- 使用位操作优化检查
- 子集相关位操作
- 使用 c++ 提升库的按位操作
- 位操作和异或
- 位操作将最左侧的设置位转换为右侧交替位?
- 为什么对小于 4 个字节的整数类型的位操作会发生意外行为?
- POD 类型的原子按位操作
- 如何使用位操作在单个整数中编码和解码两个数字
- __int128的位操作
- 使用位操作会影响内存消耗?
- 在具有位操作的函数中获得值
- C/C 位操作不会导致预期输出
- 在数组大小中使用位操作的原因
- 了解C++位操作中的二进制转换实现