【问题标题】:C# - Type SizesC# - 类型大小
【发布时间】:2015-11-22 18:56:15
【问题描述】:

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

【问题讨论】:

标签: c# types size unsigned signed


【解决方案1】:

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

E.G 8bit int : 00000001 == 1

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

例如 11111111 == -1(使用称为二进制补码的东西。链接中的更多详细信息)

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

【讨论】:

    【解决方案2】:

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

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

    从上图中可以看出,255 占用了位 0 到位 7(连续八个 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 |
    +------+-----+----------------------+----------------------+---------------------+
    

    浮点数和双精度等浮点数以不同的方式存储,这不太容易解释:https://en.wikipedia.org/wiki/Floating_point#Internal_representation

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

    还值得注意的是int 已签名,而uint 未签名。由于它们的specification,所有浮点数都签名

    有用的链接(来自 cmets 等):

    【讨论】:

      猜你喜欢
      • 2011-11-29
      • 2011-03-14
      • 1970-01-01
      • 1970-01-01
      • 2012-03-21
      • 1970-01-01
      • 2019-01-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多