我知道int
and long
(32 位和 64 位数字),但是uint
and是ulong
什么?
5 回答
以“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
类型 Min Max 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 。
阅读文档以获取更多信息:
不同之处在于uint
andulong
是无符号数据类型,意味着范围不同:它们不接受负值:
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
u
意味着unsigned
,所以ulong
是一个没有符号的大数。ulong
您可以在than中存储更大的值long
,但不允许使用负数。
一个long
值以 64 位存储,其第一个数字显示它是正数还是负数。whileulong
也是 64 位的,全部用 64 位来存储数字。所以 ulong 的最大值是 2(64)-1,而 long 是 2(63)-1。
自从我使用 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。