C# - 类型大小

时间:2015-08-28 07:26:23

标签: c# types size unsigned signed

最近我一直在努力学习C#,但我却无法理解某些内容。每个整数类型都有一个大小(有符号8位,无符号8位,有符号16位,无符号16位等)。我很难理解尺寸究竟是什么,以及它们如何达到这个尺寸。 8bit,16bit,32bit等是什么意思?签名和未签名也是如此。我不明白这些。如果有人可以引用我的链接解释位,签名和未签名,或甚至向我解释,那将是伟大的。感谢

2 个答案:

答案 0 :(得分:5)

所有类型都存储为计算机上的位。

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

Calculator in Programmer Mode

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

有符号值使用一位表示符号(正数或负数)。因此,带符号的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

基本上,对于整数,更多位表示更大的数字,浮点更多位可能意味着更大的数字和/或更高的精度(小数位)。

值得注意的是,int已签名,而uint未签名。由于specification

,所有浮点数都是签名

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

答案 1 :(得分:2)

大小确定在类型存储中使用的位数。

E.G 8bit int:00000001 == 1

如果某个类型已签名,则该类型的第一个位确定它是正值还是负值

例如11111111 == -1(使用称为二进制补码的内容。链接中的更多细节)

可以在此处找到签名类型的快速概述: http://kias.dyndns.org/comath/13.html