gpt4 book ai didi

c# - 将一些移位代码从 C++ 复制到 C#

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:08:46 25 4
gpt4 key购买 nike

我正在尝试将枚举从 C++ 代码转换为 C# 代码,但我无法理解它。 C++代码是:

enum FOO {
FOO_1 = 0,
FOO_2,
// etc
}

#define MASK(x) ((1 << 16) | (x))

enum DISP
{
DISP_1 = MASK(FOO_1),
DISP_2 = MASK(FOO_2),
// etc
}

我不明白 MASK 在做什么,以及我如何在 C# 中模拟功能,或者理解它在做什么并在没有它的情况下手动设置枚举 DISP。

我不确定我所说的是否有道理,但当我不完全确定我在看什么时,这是可以预料的。

最佳答案

当您进行位移时,它会将所有 1 和 0 向左或向右移动一些值。

在你的情况下 1 << 16以二进制形式创建 10000000000000000。 (是的,那是 16 个零)。

然后它获取该数字并使用 |这是按位或运算符。因此,无论枚举的整数值是多少,它都会按位或运算为我们移位的那个数字。

例如,如果您使用 MASK(FOO_4) (字面值为 3)3 在二进制中为 11,因此结果为 10000000000000011。这在功能上与将每个值相加 65,536 相同。

现在,当我们声明第二个枚举时,我们将这些枚举值的值设置为这个奇怪的屏蔽函数。

要在 C# 中做同样的事情,试试这个:

enum Foo { //this may not be needed anymore?
FOO_1 = 0, FOO_2, ... etc
}

enum Disp { //DISP_2 gets the next value ie 65536 + 1, and so forth
DISP_1 = 65536, DISP_2, DISP_3, ... etc

关于c# - 将一些移位代码从 C++ 复制到 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12850702/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com