vb6 与 c# 中的异或 (XOR)
Exclusive OR (XOR) in vb6 versus c#
我正在将一个 vb6 程序转换为 c#,但我不明白为什么我的异或操作的结果会给我不同的值。
vb6代码:
'serialNum = 884167284, and dSize = 1953312760 here'
serialNum = serialNum Xor dSize 'serialNum = 1088322956 after this operation'
serialNum = serialNum Xor &HD7BF3A9C 'serialNum = -1755232496 after this operation'
GetDriveSerialNum = serialNum
C#代码:
//serialNum = 884167284, and dSize = 1953312760 here
serialNum = serialNum ^ dSize; //serialNum = 1088322956 after this operation
serialNum = serialNum ^ 0xD7BF3A9C; //serialNum = 2539734800 after this operation
return serialNum;
我需要 c# 代码给出负数,即 vb6 代码的结果。我该怎么做才能实现这一目标?
vb6中的long
是一个32位有符号值,所以它的范围是-2,147,483,468到2,147,483,468。
C#中的long
是一个64位有符号值,所以它的取值范围是–9,223,372,036,854,775,808到9,223,372,036,854,775,807。
在 vb6 XOR 中你溢出了,这就是为什么数字是负数。要获得相同的值,您可以在 C# 中使用 int
。
C# long
数据类型是 64 位长有符号整数。 VB6 long
数据类型是 32 位有符号整数。因此,在 VB6 中,您将获得操作集的符号位,而在 C# 中,它是未设置的。
改用 C# 中的 32 位整数类型 (int
/ Int32
)。
只要 VB6 中的 long
数据类型是 32 位有符号整数,而在 C# 中它是 64 位有符号整数,您就需要在 C# 中使用 uint
数据类型。
uint serialNum = 884167284;
uint dSize = 1953312760;
serialNum = serialNum ^ dSize;
serialNum = serialNum ^ 0xD7BF3A9C;
//Your signed representation -1755232496.
int serialNumSigned = (int)serialNum;
我正在将一个 vb6 程序转换为 c#,但我不明白为什么我的异或操作的结果会给我不同的值。
vb6代码:
'serialNum = 884167284, and dSize = 1953312760 here'
serialNum = serialNum Xor dSize 'serialNum = 1088322956 after this operation'
serialNum = serialNum Xor &HD7BF3A9C 'serialNum = -1755232496 after this operation'
GetDriveSerialNum = serialNum
C#代码:
//serialNum = 884167284, and dSize = 1953312760 here
serialNum = serialNum ^ dSize; //serialNum = 1088322956 after this operation
serialNum = serialNum ^ 0xD7BF3A9C; //serialNum = 2539734800 after this operation
return serialNum;
我需要 c# 代码给出负数,即 vb6 代码的结果。我该怎么做才能实现这一目标?
vb6中的long
是一个32位有符号值,所以它的范围是-2,147,483,468到2,147,483,468。
C#中的long
是一个64位有符号值,所以它的取值范围是–9,223,372,036,854,775,808到9,223,372,036,854,775,807。
在 vb6 XOR 中你溢出了,这就是为什么数字是负数。要获得相同的值,您可以在 C# 中使用 int
。
C# long
数据类型是 64 位长有符号整数。 VB6 long
数据类型是 32 位有符号整数。因此,在 VB6 中,您将获得操作集的符号位,而在 C# 中,它是未设置的。
改用 C# 中的 32 位整数类型 (int
/ Int32
)。
只要 VB6 中的 long
数据类型是 32 位有符号整数,而在 C# 中它是 64 位有符号整数,您就需要在 C# 中使用 uint
数据类型。
uint serialNum = 884167284;
uint dSize = 1953312760;
serialNum = serialNum ^ dSize;
serialNum = serialNum ^ 0xD7BF3A9C;
//Your signed representation -1755232496.
int serialNumSigned = (int)serialNum;