移植c++代码到VBScript,位操作符溢出

Porting C++ code to VBScript, overflow with bitwise operators

本文关键字:位操作 操作符 溢出 VBScript c++ 代码 移植      更新时间:2023-10-16

我正在尝试将以下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类型更多的值。