将复杂的C++转换转换为 C#

Convert complex C++ casts to C#

本文关键字:转换 C++ 复杂      更新时间:2023-10-16

我正在将一些C++代码移植到C#。

直到现在,理解它并不难。

在C++,我发现:

#define TWO_POW(n)      ((double)(1ULL<<(n)))
static int someFunction(uint32_t someValue, uint32_t otherValue)
{
   int32_t someVar;
   someVar = ((someValue * TWO_POW(22)) / otherValue) * (-1);
   /* ...use someVar in some other code */
}

我看不出这是如何处理的,以及如何将其转换为 C# 代码。

不确定是否:

someVar = (int) (((((double)(long)someValue) * ((double)(1L << 22))) / otherValue) * (-1));

将在 C# 中完成同样的事情。

我认为您的尝试过于复杂 - 以下内容适用于我,使用几个不同的值进行测试:

someVar = (int)((someValue * ((double)(1UL << (22)))) / otherValue) * (-1);

(请注意,"uint32_t"转换为"uint","int32_t"转换为"int" - 此外,C++"ULL"后缀在C#中转换为"UL",而不是"L")。