C# - 类型大小

C# - Type Sizes

最近我一直在尝试学习 C#,但我在理解某些东西时遇到了困难。每个整数类型都有一个大小(有符号 8 位、无符号 8 位、有符号 16 位、无符号 16 位等)。我很难理解尺寸到底是多少,以及它们是如何获得该尺寸的。 8位、16位、32位等是什么意思?以及签名和未签名。我不明白这些。如果有人可以向我推荐 link,其中包含有关位以及有符号和无符号的解释,甚至可以向我解释一下,那就太好了。谢谢

大小决定了在类型的存储中使用了多少位。

E.G 8 位整数:00000001 == 1

如果类型是有符号的,则类型的第一位决定它是正值还是负值

例如 11111111 == -1(使用二进制补码。link 中有更多详细信息)

可以在这里找到签名类型的简要说明: http://kias.dyndns.org/comath/13.html

所有类型都以位的形式存储在您的计算机上。

如果您打开计算器并将其置于程序员模式 (Alt + 3),您可以看到数字(无论如何是整数)如何表示为位。

从上图可以看出,255占用了bit 0到bit 7(连续八个1的)。 255 是您可以用 8 位无符号整数表示的最大数字。如果在 8 位类型上将 1 加到 255,则会出现溢出错误,因为 256 不适合 8 位。在低级语言中,如果没有溢出错误,255 + 1 等于 0,因为值 roll over.

有符号值使用一位来表示符号(正或负)。所以一个带符号的 8 位数字可以从 -128 到 127。

+------+-----+----------------------+----------------------+---------------------+
|      | unsigned                   | signed                                     |
+------+-----+----------------------+----------------------+---------------------+
| bits | min | max                  | min                  | max                 |
+------+-----+----------------------+----------------------+---------------------+
| 8    | 0   | 255                  | -128                 | 127                 |
| 16   | 0   | 65535                | -32768               | 32767               |
| 32   | 0   | 4294967295           | -2147483248          | 2147483647          |
| 64   | 0   | 18446744073709551615 | -9223372036854775808 | 9223372036854775807 |
+------+-----+----------------------+----------------------+---------------------+

像 float 和 double 这样的浮点数以不同的方式存储,这不太容易解释:https://en.wikipedia.org/wiki/Floating_point#Internal_representation

基本上,对于整数,更多位意味着更大的数字,对于浮点数,更多位意味着更大的数字and/or更精确(小数位)。

还值得注意的是 int 是有符号的,而 uint 是无符号的。由于 specification.

,所有浮点数都是 有符号

有用的链接(来自评论等):