我知道
int
和 long
(32 位和 64 位数字),但是 uint
和 ulong
是什么?
以“u”为前缀的原始数据类型是具有相同位大小的无符号版本。实际上,这意味着它们不能存储负数,但另一方面,它们可以存储比带符号的数字大两倍的正数。签名的副本没有“u”前缀。
int(32 位)的限制是:
int: –2147483648 to 2147483647
uint: 0 to 4294967295
长时间(64 位):
long: -9223372036854775808 to 9223372036854775807
ulong: 0 to 18446744073709551615
uint
和 ulong
是 int
和 long
的无符号版本。这意味着它们不能是消极的。相反,它们具有更大的最大值。
类型 最小值 最大值 符合 CLS 整数 -2,147,483,648 2,147,483,647 是 uint 0 4,294,967,295 否 长 –9,223,372,036,854,775,808 9,223,372,036,854,775,807 是 乌龙 0 18,446,744,073,709,551,615 无
要在源代码中写入文字 unsigned int,您可以使用后缀
u
或 U
,例如 123U
。
如果您希望CLS 兼容,则不应在公共接口中使用 uint 和 ulong。
阅读文档以获取更多信息:
u
的意思是unsigned
,所以ulong
是一个没有符号的大数。您可以在 ulong
中存储比 long
更大的值,但不允许使用负数。
long
值以64位存储,其第一位数字显示它是正数还是负数。而ulong
也是64位的,都是64位来存储数字。所以 ulong 的最大值是 2(64)-1,而 long 的最大值是 2(63)-1。
区别在于
uint
和 ulong
是无符号数据类型,意味着范围不同:它们不接受负值:
int range: -2,147,483,648 to 2,147,483,647
uint range: 0 to 4,294,967,295
long range: –9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
ulong range: 0 to 18,446,744,073,709,551,615
根据这里的其他答案和一点回顾,您可以这样理解:无符号是指负数或正数显式赋值的赋值(想想-1中的“-”)以及无法拥有负数版本说数字。
由于负端的容量被作为一种选择移除,因此他们将该容量分配给正端,因此正估值的最大值加倍。因此,比特范围不是沿着正估值和负估值分割,而是将 ushort、uint、along 等分配给估值的正端。
自从我使用 C++ 以来已经有一段时间了,但是这些答案对于 C# 来说有点偏离。我不记得我最初回答时是否没有 c# 标签,或者我是否只是没有注意到标签。如果你错过了一个标签,上帝会帮助你,尽管问题很散文或搜索引擎如何找到你。
再次强调,对于 C/C++:就大小而言,“int”不算什么。它是标准整数的名义值;出于迭代等目的,假设速度很快。它没有预设尺寸。
因此,关于 int 和 uint 之间的差异,答案是正确的,但当他们谈论“它们有多大”或它们的范围是多少时,答案是不正确的。该大小是未定义的,或者更准确地说,它会随着编译器和平台的变化而变化。
在公共场合讨论你的比特大小是不礼貌的。
当你编译程序时,int确实有一个大小,因为你已经将抽象的C/C++转换为具体的机器代码。
所以,今天,实际上对于大多数常见的编译器来说,它们是正确的。但不要假设这一点。
具体来说:如果你正在编写32位程序,int将是一回事,64位,它可以不同,16位则不同。我已经浏览了这三个并简要浏览了 6502 不寒而栗
简短的谷歌搜索显示了这一点: https://www.tutorialspoint.com/cprogramming/c_data_types.htm 这也是很好的信息: https://docs.oracle.com/cd/E19620-01/805-3024/lp64-1/index.html
如果你真的不关心你的位有多大,请使用 int ;它可以改变。
如果你想知道某物有多大,请使用 size_t 和 ssize_t。
如果您正在读取或写入二进制数据,请不要使用 int。使用(通常取决于平台/源)特定关键字。 WinSDK 有很多很好的、可维护的例子。其他平台也如此。
我花了很多时间浏览那些“SMH”的人的代码,他们认为这只是学术/迂腐的想法。这些人吃掉了那些编写无法维护的代码的人。当然,使用“int”类型很容易,并且不需要所有额外的输入。要弄清楚它们的真正含义需要做很多工作,而且有点令人头脑麻木。
当你混合 int 和假设大小时,这是脆弱的编码。
当您只想要一个快速整数而不关心范围(有符号/无符号除外)时,请使用 int 和 uint。