C# 为什么Int64和UInt64的大小相同

C# 为什么Int64和UInt64的大小相同,c#,.net,C#,.net,我是在C.的上下文中提问的。为什么Int64和UInt64大小相同,即64位。其他Int变量也是如此 我希望UInt的大小至少要小一点,因为它不需要表示-符号,我希望这里出现一些不合逻辑的事情吗?Int64中的64和UInt64意味着整数的大小是64位。这就是为什么它们大小相同 大小相同,但范围不同(也由于有效位): UInt64:0至18446744073709551615 Int64:-9223372036854775808至9223372036854775807 Int64和UInt64

我是在
C.
的上下文中提问的。为什么
Int64
UInt64
大小相同,即
64位
。其他Int变量也是如此


我希望
UInt
的大小至少要小一点,因为它不需要表示
-
符号,我希望这里出现一些不合逻辑的事情吗?

Int64
中的
64
UInt64
意味着整数的大小是64位。这就是为什么它们大小相同

大小相同,但范围不同(也由于有效位):

  • UInt64:0至18446744073709551615
  • Int64:-9223372036854775808至9223372036854775807

  • Int64
    UInt64
    中的
    64
    表示整数的大小为64位。这就是为什么它们大小相同

    大小相同,但范围不同(也由于有效位):

    • UInt64:0至18446744073709551615
    • Int64:-9223372036854775808至9223372036854775807
      • 这里是C#的缩写。如果你看那里,你可以看到:

        长-9223372036854775808到9223372036854775807有符号64位整数

        ulong 0到18446744073709551615无符号64位整数

        如果你看,两者的“范围”是相同的,2^64(包括0)

        使用较小的数据类型可能更容易:

        sbyte-128到127有符号8位整数

        字节0到255无符号8位整数

        两者的“范围”都是256个值,都是8位,2^8==256

        请注意,有符号和无符号类型具有相同的值范围,因为历史上几乎所有处理器都使用数字。如果他们使用了,则有符号数字的有效范围将比无符号数字的范围小一个,因为将有两个0值(正0和负0)

        这里是C的值。如果你看那里,你可以看到:

        长-9223372036854775808到9223372036854775807有符号64位整数

        ulong 0到18446744073709551615无符号64位整数

        如果你看,两者的“范围”是相同的,2^64(包括0)

        使用较小的数据类型可能更容易:

        sbyte-128到127有符号8位整数

        字节0到255无符号8位整数

        两者的“范围”都是256个值,都是8位,2^8==256

        请注意,有符号和无符号类型具有相同的值范围,因为历史上几乎所有处理器都使用数字。如果他们使用了,则有符号数字的有效范围将比无符号数字的范围小一个,因为将有两个0值(正0和负0)

        这一切都归结为最高有效位的用途。在签名数据中,它表示符号;在无符号数据中,它只是另一个位。这意味着无符号数据可以表示大小两倍的值,但仅表示正值(和零)-例如,在64位的情况下,无符号值为0到18446744073709551615-其中有符号值为-9223372036854775808到9223372036854775807

        8位更容易看到:-128到127,而0到255。可能值的数量是相同的。

        这一切都取决于最高有效位的用途。在签名数据中,它表示符号;在无符号数据中,它只是另一个位。这意味着无符号数据可以表示大小两倍的值,但仅表示正值(和零)-例如,在64位的情况下,无符号值为0到18446744073709551615-其中有符号值为-9223372036854775808到9223372036854775807


        8位更容易看到:-128到127,而0到255。可能值的数量是相同的。

        根本原因是现代CPU是64位的。 所以它更容易实现

          64-bit integer - one CPU register  (say RAX)
          32-bit integer - half CPU register (EAX)
          16-bit integer - 1/4 (AX)
           8-bit integer - 1/8 (AH)
        

        否则(比如说
        96位
        ),您必须设计自己的支持,比如说,整数溢出检测等,这将很慢

        根本原因是现代CPU是64位的。 所以它更容易实现

          64-bit integer - one CPU register  (say RAX)
          32-bit integer - half CPU register (EAX)
          16-bit integer - 1/4 (AX)
           8-bit integer - 1/8 (AH)
        

        否则(比如说
        96位
        ),您必须设计自己的支持,比如说,整数溢出检测等,这将很慢

        无符号类型可以表示较大的值。e、 g.UInt8从0到255,Int8从-128到127。两者都支持2^8=256个不同的值。该标志通过表示。是。特定大小的无符号和有符号类型具有相同的。。。大小取决于定义。有符号类型使用一位作为符号,因此它们的最大范围是无符号类型的一半。有符号类型可以表示更大的值。e、 g.UInt8从0到255,Int8从-128到127。两者都支持2^8=256个不同的值。该标志通过表示。是。特定大小的无符号和有符号类型具有相同的。。。大小取决于定义。有符号类型使用一位作为符号,因此其最大范围是无符号类型的一半