最近我一直在努力学习C#,但我却无法理解某些内容。每个整数类型都有一个大小(有符号8位,无符号8位,有符号16位,无符号16位等)。我很难理解尺寸究竟是什么,以及它们如何达到这个尺寸。 8bit,16bit,32bit等是什么意思?签名和未签名也是如此。我不明白这些。如果有人可以引用我的链接解释位,签名和未签名,或甚至向我解释,那将是伟大的。感谢
答案 0 :(得分:5)
所有类型都存储为计算机上的位。
如果打开计算器并将其置于程序员模式(Alt + 3),您可以看到数字(整数,无论如何)如何表示为位。
从上图中可以看出,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