我提出了一个解决阶乘的应用程序,当我输入一个长度超过20位数的long变量时,它会返回一个负数.我想知道为什么longC#中的变量在超过限制时会返回负值?它应该是这样的吗?
Hen*_*man 11
这是非常正常的行为,称为溢出.
作为第一步,将其变为错误
checked
{
// your calculations
}
Run Code Online (Sandbox Code Playgroud)
而这本书与所有的比特和字节一个详尽的解释.
这可能有助于搞清楚:
static void Main2(string[] args)
{
short s = 0;
Console.WriteLine("Dec: {0,6} Hex {0:X4}", s);
s -= 1;
Console.WriteLine("Dec: {0,6} Hex {0:X4}", s);
s = short.MaxValue;
Console.WriteLine("Dec: {0,6} Hex {0:X4}", s);
s += 1;
Console.WriteLine("Dec: {0,6} Hex {0:X4}", s);
Console.WriteLine(s == short.MinValue); // is MaxValue+1 == MinValue ?
}
Run Code Online (Sandbox Code Playgroud)
它打印
Dec: 0 Hex 0000
Dec: -1 Hex FFFF
Dec: 32767 Hex 7FFF
Dec: -32768 Hex 8000
True
Run Code Online (Sandbox Code Playgroud)
将Hex char读取为位:
0 = 0000
1 = 0001
7 = 0111
8 = 1000
F = 1111
Run Code Online (Sandbox Code Playgroud)
您可以看到最重要(最左侧)位用作+/-符号.
| 归档时间: |
|
| 查看次数: |
3148 次 |
| 最近记录: |