0

我正在将一些用 C 编写的代码转换为 C#,因为我需要为我的嵌入式 C 项目编写支持应用程序。我正在进行一些繁重的布尔计算,因为它正在计算要进入硬件寄存器的值。

我在 C 项目和 C# 项目中都需要相同的定义,有很多定义,所以我需要用最少的努力进行转换。

这两个例子都非常简化

为什么我不能这样做?

#define MCLK (198656000)
#define MCLK_TICK_NS (1000000000 / MCLK);

转换成

private const uint MCLK = 198656000;
private const uint MCLK_TICK_NS = (1000000000 / MCLK);

正确的方法是什么?

为什么我不能这样做?

#define test (unsigned long)((unsigned long)0x1 << (unsigned long)31)

转换成

private const uint test = (uint)((uint)0x1 << (uint)31);

正确的方法是什么?

在第二个示例中,我收到错误

错误 1 ​​常量值 '-2147483648' 无法转换为 'uint'(使用 'unchecked' 语法覆盖)

到底是use 'unchecked' syntax to override什么?

为什么我要关闭检查来做一些完全合法的事情?

4

1 回答 1

2

第一个代码为我编译没有错误。

对于第二个示例,我还有另一个错误(但我使用的是单声道):

错误 CS0019:运算符<<' cannot be applied to operands of typeuint' 和 'uint'

所以,uint31

private const uint test = (uint)((uint)0x1 << 31);
//                               no cast here ^^ 

解决问题。另外,我看不出第一次演员的理由,你可以简单地写

private const uint test = (uint)0x1 << 31;
于 2013-09-12T14:15:17.600 回答