W C, w kontekstach nieobjętych promocją liczb całkowitych , określono niepodpisane wartości, które będą zachowywać się jak elementy „zawijającego” abstrakcyjnego pierścienia algebraicznego (więc dla każdego X i Y, XY da unikalną wartość, która po dodaniu do Y da X ), podczas gdy typy liczb całkowitych ze znakiem były określone jako zachowujące się jak liczby całkowite, gdy obliczenia pozostawały w określonym zakresie, i pozwalały na wykonanie dowolnej czynności, gdy obliczenia wykraczały poza to. Jednak semantyka numeryczna w języku C # jest zupełnie inna. W sprawdzonym kontekście liczbowym zarówno podpisane, jak i niepodpisane typy zachowują się jak liczby całkowite, pod warunkiem, że obliczenia pozostają w zasięgu i rzucają, OverflowExceptiongdy nie; w niesprawdzonym kontekście oba zachowują się jak pierścienie algebraiczne.
Jedynym czasem, w którym ogólnie warto jest użyć dowolnego typu danych mniejszego niż Int32jest to konieczne, gdy konieczne jest pakowanie lub rozpakowywanie rzeczy w celu kompaktowego przechowywania lub transportu. Jeśli trzeba zapisać pół miliarda liczb dodatnich, a wszystkie będą w zakresie od 0 do 100, użycie jednego bajtu zamiast czterech spowoduje oszczędność 1,5 gigabajta pamięci. To duże oszczędności. Jeśli jednak fragment kodu musi przechowywać w sumie kilkaset wartości, uczynienie każdego z nich jednym bajtem zamiast czterech pozwoliłoby zaoszczędzić około 600 bajtów. Prawdopodobnie nie warto się tym przejmować.
Jeśli chodzi o typy niepodpisane, naprawdę przydatne są tylko podczas wymiany informacji lub dzielenia liczb na części. Jeśli na przykład trzeba wykonać matematykę na 96-bitowych liczbach całkowitych, prawdopodobnie łatwiej będzie wykonać obliczenia na grupach trzech 32-bitowych liczb całkowitych bez znaku, niż na grupach liczb całkowitych ze znakiem. W przeciwnym razie nie ma zbyt wielu sytuacji, w których zakres podpisanej 32- lub 64-bitowej wartości byłby nieodpowiedni, ale wystarczający byłby ten sam rozmiar niepodpisanej wartości.