En C, en contextos que no involucran la promoción de enteros , se especificaron valores sin signo para comportarse como miembros de un anillo algebraico abstracto "envolvente" (por lo que para cualquier X e Y, XY producirá un valor único que, cuando se agrega a Y, producirá X ), mientras que los tipos enteros con signo se especificaban como comportándose como enteros cuando los cálculos se mantenían dentro de un cierto rango, y se les permitía hacer cualquier cosa cuando los cálculos iban más allá de eso. La semántica numérica en C #, sin embargo, es totalmente diferente. Cuando se encuentra dentro de un contexto numérico verificado, los tipos con signo y sin signo se comportan como enteros siempre que los cálculos permanezcan dentro del rango y se arrojen OverflowExceptioncuando no lo hacen; en un contexto no controlado, ambos se comportan como anillos algebraicos.
El único momento en el que generalmente vale la pena usar cualquier tipo de datos más pequeño que Int32cuando es necesario empacar o desempacar cosas para almacenamiento o transporte compacto. Si uno necesita almacenar 500 millones de números positivos, y todos estarán en el rango de 0 a 100, usar un byte cada uno en lugar de cuatro ahorrará 1.5 gigabytes de almacenamiento. Eso es un gran ahorro. Sin embargo, si una pieza de código necesita almacenar un total de un par de cientos de valores, hacer que cada uno de ellos sea un byte en lugar de cuatro ahorraría aproximadamente 600 bytes. Probablemente no valga la pena molestarse.
Con respecto a los tipos sin signo, las únicas veces que son realmente útiles son cuando se realiza el intercambio de información o cuando se subdividen los números en partes. Si, por ejemplo, uno necesita hacer cálculos matemáticos en enteros de 96 bits, probablemente será mucho más fácil realizar los cálculos en grupos de tres enteros de 32 bits sin signo, que en grupos de enteros con signo. De lo contrario, no hay muchas situaciones en las que el rango de un valor con signo de 32 o 64 bits sea inadecuado, pero sería suficiente el mismo tamaño de valor sin signo.