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.
,所有浮点数都是 有符号
有用的链接(来自评论等):
- 维基百科位:https://en.wikipedia.org/wiki/Bit
- 维基百科整数:https://en.wikipedia.org/wiki/Integer_(computer_science)
- C# 整数数据类型:https://msdn.microsoft.com/en-us/library/exx3b86w.aspx
- C# 浮点数据类型:https://msdn.microsoft.com/en-us/library/9ahet949.aspx
- 编程幻数:https://msdn.microsoft.com/en-us/library/ee621251.aspx
- 浮点标准:http://steve.hollasch.net/cgindex/coding/ieeefloat.html
最近我一直在尝试学习 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.
有用的链接(来自评论等):
- 维基百科位:https://en.wikipedia.org/wiki/Bit
- 维基百科整数:https://en.wikipedia.org/wiki/Integer_(computer_science)
- C# 整数数据类型:https://msdn.microsoft.com/en-us/library/exx3b86w.aspx
- C# 浮点数据类型:https://msdn.microsoft.com/en-us/library/9ahet949.aspx
- 编程幻数:https://msdn.microsoft.com/en-us/library/ee621251.aspx
- 浮点标准:http://steve.hollasch.net/cgindex/coding/ieeefloat.html