将复杂的C++转换转换为 C#
本文关键字:转换 C++ 复杂 | 更新日期: 2023-09-27 18:33:14
我正在将一些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")。