Яка різниця між "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.