Яка різниця між "int" та "uint" / "long" та "ulong"?


Відповіді:


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
Jaco Pretorius

при порівнянні int та uint для використання, який із них можливий?
Арун Прасад

Що таке еквівалент c ++?
darkgaze

@JacoPretorius Це неправильно. 8 бітний int має діапазон від –128 до 127. Дев'ятий біт являє собою 256. Отже, за допомогою 8 біт ви можете представляти всі значення до 255 (9-й val - 1). Діапазон від -128 до 127 має довжину рівно 255. Тому немає біта, який би тримав знак. Усі значення до 127 позитивні. Значення вище відображаються негативними. 255 було б -1. 254 було б -2 і так в один бік до 128.
C4d

Я думаю, що також варто відзначити, що спеціально для int vs uint ціле число, що не підписується, не відповідає сумісності CLS, і рекомендується використовувати int якомога частіше.
db2

38

uintі ulongє безпідписаними версіями intта long. Це означає, що вони не можуть бути негативними. Натомість вони мають більшу максимальну величину.

Тип Min Max 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 у вихідному коді ви можете використовувати суфікс uабо, Uнаприклад 123U.

Ви не повинні використовувати uint та ulong у своєму загальнодоступному інтерфейсі, якщо ви хочете бути сумісними з CLS .

Прочитайте документацію для отримання додаткової інформації:

До речі, є також короткі і ушорти, і байти, і байти .


Це цікаво - що ви думаєте про сумісність із CLS? Посилання переходить до документації MSDN для int. Якщо під "CLS" ви маєте на увазі специфікацію мови C #, то я не розумію - специфікація чітко описує і uint, і ulong (розділ 1.3)
Isak Savo

1
@Isak Savo: Важливо бути сумісним із CLS, якщо ви пишете інтерфейс, який може використовуватися іншими мовами .NET, ніж C #.
Марк Байєрс

Цікаво, що ви згадуєте короткий і ушорт, але не залишайте байт і сбит :)
Роман Старков,

10

uзначить unsigned, так ulongце велика кількість без знака. Ви можете зберігати більше значення, ulongніж long, але негативні числа заборонені.

longЗначення зберігається в 64-бітному, з першою цифрою , щоб показати , якщо це позитивне / негативне число. а ulongтакож 64-розрядна, при цьому всі 64-бітні для зберігання номера. тому максимум улонг - 2 (64) -1, а довгий - 2 (63) -1.


9

Різниця полягає в тому, що типи даних 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.