У C в контекстах, що не включають ціле просування , непідписані значення визначали, як вони поводяться як члени "обгорткового" абстрактного алгебраїчного кільця (тому для будь-яких X і Y XY дасть унікальне значення, яке при додаванні до Y дасть X ), тоді як підписані цілочисельні типи визначалися як такі, що поводяться як цілі числа, коли обчислення залишалися в певному діапазоні, і дозволяли їм робити що-небудь взагалі, коли обчислення виходили за рамки цього. Числова семантика в C #, однак, абсолютно інша. Коли в межах перевіреного числового контексту, як підписані, так і непідписані типи поводяться як цілі числа за умови, що обчислення залишаються в діапазоні, і кидають, OverflowException
коли їх немає; в неперевіреному контексті вони обидва поводяться як алгебраїчні кільця.
Єдиний раз, коли взагалі варто використовувати будь-який тип даних, менший, ніж Int32
це коли потрібно упакувати чи розпакувати речі для компактного зберігання чи транспортування. Якщо вам потрібно зберегти півмільярда позитивних цифр, і всі вони будуть в діапазоні від 0 до 100, використовуючи один байт кожен, а не чотири, заощадите 1,5 гігабайта пам’яті. Це велика економія. Однак, якщо фрагмент коду повинен зберігати загалом пару сотень значень, то, зробивши кожен з них один байт, а не чотири, заощадить близько 600 байт. Напевно, не варто турбуватися.
Що стосується непідписаних типів, єдиний раз, коли вони дійсно корисні, це при здійсненні обміну інформацією або підрозділенні чисел на частини. Якщо, наприклад, потрібно робити математику на 96-бітових цілих числах, можливо, буде набагато простіше виконувати обчислення на групах з трьох непідписаних 32-бітових цілих чисел, ніж на групах підписаних цілих чисел. В іншому випадку, існує не так багато ситуацій, коли діапазон підписаного 32- або 64-бітного значення був би недостатнім, але буде достатньо одного розміру неподписаного значення.