“ int”和“ uint” /“ long”和“ ulong”和有什么区别?


Answers:


224

带有“ u”前缀的原始数据类型是具有相同位大小的无符号版本。实际上,这意味着它们不能存储负数,但另一方面,它们可以存储正负号的两倍,是其已签名的对应数的两倍。签名的对方没有前缀“ u”。

int(32位)的限制是:

int: 2147483648 to 2147483647 
uint: 0 to 4294967295 

并很长一段时间(64位):

long: -9223372036854775808 to 9223372036854775807
ulong: 0 to 18446744073709551615

12
手工进行锻炼很有趣。一个32位带符号变量使用1位符号(正或负),因此可以存储-2 ^ 31和+ 2 ^
31-1

比较int和uint的用法时,哪个可行?
阿伦·普拉萨德

什么是C ++等效项?
darkgaze

@JacoPretorius那是错误的。8位int的范围是–128到127。第9位表示256。因此,使用8位可以表示最大255(9th val-1)的所有值。从-128到127的范围的长度正好为255。因此,没有位保存该符号。直到127的所有值均为正。上面的值显示为负。255将是-1。254将是-2,所以一种方式下降到128。–
C4d

我认为还应该特别指出,对于int vs uint,无符号整数不符合CLS,建议您尽可能多地使用int。
db2

38

uint并且ulong是无符号版本intlong。那意味着他们不能消极。相反,它们具有更大的最大值。

类型最小最大符合CLS
int -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是
ulong 0 18,446,744,073,709,551,615否

要在源代码中编写文字无符号int,可以使用后缀uU例如123U

如果希望符合CLS标准,则不应在公共界面中使用uint和ulong 。

阅读文档以获取更多信息:

顺便说一下,还有shortushort以及bytesbyte


这很有趣-您对符合CLS的含义是什么?链接转到int的MSDN文档。如果用“ CLS”表示C#语言规范,那么我听不懂-规范清楚地描述了uint和ulong(1.3节)
Isak Savo 2010年

1
@Isak Savo:如果要编写可由C#以外的其他.NET语言使用的接口,则必须符合CLS。
Mark Byers

很好奇,您提到short和ushort但忽略了byte和sbyte :)
Roman Starkov 2010年

10

u意味着unsigned,所以ulong没有符号的数量很大。您可以存储更大的价值ulonglong,但不允许有负数。

long值以64位存储,其第一个数字显示该值是正数还是负数。while ulong也是64位,所有64位用于存储数字。因此ulong的最大值为2(64)-1,而long的最大值为2(63)-1。


9

区别在于uintulong是无符号数据类型,这意味着范围是不同的:它们不接受负值:

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.