C++ използва неподписани стойности, защото се нуждаят от пълния диапазон. На 32-битова система езикът трябва да позволява да има вектор от 4 GB, а не само 2 GB. (ОС може да не ви позволи да използвате всичките 4 GB, но самият език не иска да ви пречи)
В .NET целите числа без знак не са съвместими с CLS. Можете да ги използвате (в някои .NET езици), но това ограничава преносимостта и съвместимостта. Така че за библиотеката на базовия клас те използват само цели числа със знак.
И двата случая обаче са крайни. За повечето цели подписаното int
е достатъчно голямо. Така че, докато и двете предлагат диапазона, от който се нуждаете, можете да използвате и двете.
Едно предимство, което целите числа със знак понякога имат е, че те улесняват откриването на недостатъчен поток. Да предположим, че изчислявате индекс на масив и поради някакъв лош вход или може би логическа грешка във вашата програма, в крайна сметка се опитвате да получите достъп до индекс -1
.
С цяло число със знак това е лесно за откриване. С unsigned ще се увие и ще стане UINT_MAX
. Това прави много по-трудно откриването на грешката, защото сте очаквали положително число и сте получили положително число.
Така че наистина зависи. C++ използва unsigned, защото се нуждае от диапазона. .NET използва signed, защото трябва да работи с езици, които не имат unsigned.
В повечето случаи и двете ще работят, а понякога signed може да позволи на кода ви да открива грешки по-стабилно.
person
jalf
schedule
06.04.2012