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

时间:2010-09-16 06:36:32

标签: c# types integer unsigned signed

我知道intlong(32位和64位数字),但uintulong是什么?

5 个答案:

答案 0 :(得分:172)

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

int(32位)的限制是:

int: –2147483648 to 2147483647 
uint: 0 to 4294967295 

长(64位):

long: -9223372036854775808 to 9223372036854775807
ulong: 0 to 18446744073709551615

答案 1 :(得分:35)

uintulongintlong的未签名版本。这意味着他们不能消极。相反,它们具有更大的最大值。

Type    Min                           Max                           CLS-compliant
int     -2,147,483,648                2,147,483,647                 Yes
uint    0                             4,294,967,295                 No
long    –9,223,372,036,854,775,808    9,223,372,036,854,775,807     Yes
ulong   0                             18,446,744,073,709,551,615    No

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

如果您希望成为CLS-Compliant,则不应在公共界面中使用uint和ulong。

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

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

答案 2 :(得分:10)

u表示unsigned,因此ulong是一个没有符号的大数字。您可以在ulong中存储比long更大的值,但不允许使用负数。

long值以64位存储,其第一个数字表示它是正数/负数。虽然ulong也是64位,所有64位都存储该数字。所以ulong的最大值是2(64)-1,而long是2(63)-1。

答案 3 :(得分:8)

区别在于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

答案 4 :(得分:0)

自从我C ++以来已经有一段时间了,但是这些答案有些偏离。

就大小而言,“ int”什么都不是。它是标准整数的名义值;出于迭代之类的目的被认为是快速的。没有预设大小。

因此,对于int和uint之间的差异,答案是正确的,但是当他们谈论“它们的大小”或范围是多少时,答案是错误的。该大小是不确定的,或更准确地说,它将随编译器和平台的变化而变化。

在公开场合讨论您的位子大小从来都不是礼貌。

编译程序时,int 确实有的大小,因为您已将抽象的C / C ++转换为具体的机器代码。

因此,今天,实际上,对于大多数常见的编译器而言,它们是正确的。但是不要假设这一点。

具体来说:如果您正在编写32位程序,则int是64位的一件事,可以是不同的,而16位是不同的。我经历了所有三个步骤,并简要查看了6502 shudder

简短的Google搜索显示: 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。