Hel*_*ele -1 c# type-conversion
我在C#中有以下代码:
ulong value1 = 0x11234;
long value2 = (long) value1;
Console.WriteLine(value1);
Console.WriteLine(value2);
Run Code Online (Sandbox Code Playgroud)
产生:
70196
70196
Run Code Online (Sandbox Code Playgroud)
这不应该是不同的,因为转换为long时70196会是负数吗?
[演员表会自动更改按位值吗?]
不是.负号由符号位表示,符号位是最高位; 在a long,那是0x8000000000000000,并且当被解释为a时,它大于70196 ulong.
$ 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
Run Code Online (Sandbox Code Playgroud)
64位整数的位表示0x11234是0x0000000000011234.它在前面扩展为0,而不是1.
当从ulong转换为long时,这仍然是0x0000000000011234.负数将是0x8000000000011234(MSB设置为1).