ulong,长期转换困境

时间:2015-04-21 18:00:23

标签: c# type-conversion

我在C#中有以下代码:

ulong value1 = 0x11234;
long value2 = (long) value1;

Console.WriteLine(value1);
Console.WriteLine(value2);

产生:

70196
70196

这是不是因为70196在转换为long时会是负数?

[演员表会自动更改按位值吗?]

2 个答案:

答案 0 :(得分:6)

没有。符号位表示负数,这是最高位;在long中,0x8000000000000000,在解释为ulong时大于70196。

$ cat > test.cs
using System;

static class Application {
    static void Main() {
        ulong a = 0x8000000000000000;
        long b = (long)a;

        Console.WriteLine(a);
        Console.WriteLine(b);
    }
}
$ mcs test.cs
$ mono test.exe
9223372036854775808
-9223372036854775808

答案 1 :(得分:5)

64位整数0x11234的位表示为0x0000000000011234。它在前面扩展为0,而不是1。

从ulong转换为long时,这仍然是0x0000000000011234。负数为0x8000000000011234(MSB设置为1)。