我正在寻找将这行C代码转换为C#:

const u64 a = 1, b = -a;


因此,我的理解是两个常量都是无符号的64位整数。如果是这样,结果将是什么样?

还是实际上提升了第二个常数,因此将其定义为有符号整数?

最佳答案

由于behaviour of negating unsigned integers-(u64)1的表示全为1。因此,执行以下操作:

const u64 a = 1, b = -a;

// a is now 0x0000000000000001
// b is now 0xffffffffffffffff


当然,0xffffffffffffffff也是(2^64) -1,它是18446744073709551615。

我认为,原来的程序员改为写代码会更清楚:

const u64 a = 1, b = ~(u64)0;


我不是C#程序员,但我怀疑以下内容对您有用:

const ulong b = ~(ulong)0;

10-08 19:03