我假设您在谈论 Int 和 UInt 的不同形式。
首先,您必须了解值是如何存储在计算机中的。您可能听说过binary 表示。关于这个话题有很多可以讨论的,但这里有一个简短的解释:
我们通常使用十进制数。这意味着您可以在每列(1s、10s、100s...)中使用十个不同的数字(0 到 9)。因此,可以用十进制表示的值的数量由10 给出的列数的幂。
如果你只有两个列,你可以将00 表示为99,所以100 不同的值,或者10²。
现在除了十进制之外还有其他数字系统。主要区别在于它们的基础。十进制也称为 base-10,因为它有十个不同的数字。
二进制也称为 base-2,意思是只有两个数字:0 和 1。
由于数字的限制,我们也限制了对于给定数量的列可以表示的不同值的数量。通过两列,我们能够在 base-10 中表示 10² 值。因此,在 base-2 中,我们可以将 2² 值表示为:0 到 3,或二进制 00 到 11。
如需更深入的解释,请查看此video。
现在Ints 的形式(8、16、32...)指的是列数。
Ints 当然存储在内存中。并且由于内存是有限的,列数或位,允许使用Int 是有限的。值8、16、32 等是Int 使用的这些位数。由于这一限制,Ints 只能根据位数存储一定范围的数字。
所以UInt8 有8 位,因此有8 列,并且可以存储2^8 值:0 到255。
一个Int32 有32 位并且可以存储2^32 值:-2,147,483,648 到2,147,483,647。
现在Int 和UInt 之间的区别很简单。 Int 可以表示正数和负数,而UInt 只能表示非负数(因此所有大于或等于0 的值)。
我不打算解释负二进制数。如果您有兴趣,请查看Two's Complement。