我知道int
和long
(32位和64位数字),但uint
和ulong
是什么?
答案 0 :(得分:172)
前缀为“u”的原始数据类型是具有相同位大小的无符号版本。实际上,这意味着它们不能存储负数,但另一方面,它们可以存储两倍于其签名对应数的正数。已签名的同行没有“你”前缀。
int(32位)的限制是:
int: –2147483648 to 2147483647
uint: 0 to 4294967295
长(64位):
long: -9223372036854775808 to 9223372036854775807
ulong: 0 to 18446744073709551615
答案 1 :(得分:35)
uint
和ulong
是int
和long
的未签名版本。这意味着他们不能消极。相反,它们具有更大的最大值。
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,您可以使用后缀u
或U
,例如123U
。
如果您希望成为CLS-Compliant,则不应在公共界面中使用uint和ulong。
阅读文档以获取更多信息:
答案 2 :(得分:10)
u
表示unsigned
,因此ulong
是一个没有符号的大数字。您可以在ulong
中存储比long
更大的值,但不允许使用负数。
long
值以64位存储,其第一个数字表示它是正数/负数。虽然ulong
也是64位,所有64位都存储该数字。所以ulong的最大值是2(64)-1,而long是2(63)-1。
答案 3 :(得分:8)
区别在于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
答案 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。