What is the difference between “int” and “uint” / “long” and “ulong”?
Solution 1
The primitive data types prefixed with "u" are unsigned versions with the same bit sizes. Effectively, this means they cannot store negative numbers, but on the other hand they can store positive numbers twice as large as their signed counterparts. The signed counterparts do not have "u" prefixed.
The limits for int (32 bit) are:
int: –2147483648 to 2147483647
uint: 0 to 4294967295
And for long (64 bit):
long: -9223372036854775808 to 9223372036854775807
ulong: 0 to 18446744073709551615
Solution 2
uint
and ulong
are the unsigned versions of int
and long
. That means they can't be negative. Instead they have a larger maximum value.
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
To write a literal unsigned int in your source code you can use the suffix u
or U
for example 123U
.
You should not use uint and ulong in your public interface if you wish to be CLS-Compliant.
Read the documentation for more information:
By the way, there is also short and ushort and byte and sbyte.
Solution 3
The difference is that the uint
and ulong
are unsigned data types, meaning the range is different: They do not accept negative values:
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
Solution 4
u
means unsigned
, so ulong
is a large number without sign. You can store a bigger value in ulong
than long
, but no negative numbers allowed.
A long
value is stored in 64-bit,with its first digit to show if it's a positive/negative number. while ulong
is also 64-bit, with all 64 bit to store the number. so the maximum of ulong is 2(64)-1, while long is 2(63)-1.
Difference Engine
What is the difference between me and someone else?
Updated on April 21, 2022Comments
-
Difference Engine about 2 years
I know about
int
andlong
(32-bit and 64-bit numbers), but what areuint
andulong
? -
Jaco Pretorius over 13 yearsThis is quite fun to work out by hand. A 32-bit signed variable uses 1 bit for the sign (positive or negative) so can store values between -2^31 and +2^31 - 1
-
Isak Savo over 13 yearsThis is interesting - what do you mean about CLS compliant? The link goes to the MSDN documentation for int. If by "CLS" you mean C# language spec then I don't understand - the spec clearly describes both uint and ulong (section 1.3)
-
Mark Byers over 13 years@Isak Savo: It is important to be CLS-compliant if you are writing interface that could be used by other .NET languages than C#.
-
Roman Starkov over 13 yearsCurious that you mention short and ushort but leave out byte and sbyte :)
-
Arun Prasad almost 8 yearswhen comparing int and uint for usage, which one is feasible?
-
Darkgaze over 6 yearsWhat's the c++ equivalent?
-
C4d over 5 years@JacoPretorius Thats wrong. 8 bit int has a range from –128 to 127. The 9th bit represents 256. So with 8 bits you can represent all values up to 255 (9th val - 1). The range from -128 to 127 has a length of exactly 255. So there is no bit that holds the sign. All values up to 127 are positive. Values above get displayed negative. 255 would be -1. 254 would be -2 and so one way down to 128.
-
db2 about 5 yearsI think it's also worth noting that specifically for int vs uint, the unsigned integer is not CLS-compliant, and it's recommended to use int as often as possible.