我正在寻找将这行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;