我在C#中有以下代码:
ulong value1 = 0x11234;
long value2 = (long) value1;
Console.WriteLine(value1);
Console.WriteLine(value2);
产生:
70196
70196
这是不是因为70196在转换为long时会是负数?
[演员表会自动更改按位值吗?]
答案 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)。