Często wiadomo, że wartości są dodatnie. Na przykład numer sekwencji TCP/UDP jest zawsze wartością dodatnią. Zarówno int
, jak i unsigned int
są wystarczająco duże, aby pomieścić nawet największy sequence number
, więc mogę używać dowolnego z tych typów. Istnieje wiele innych przykładów, gdy wartości są pozytywne.Czy powinienem używać "unsigned" za każdym razem, gdy wiem, że przetwarzam niepodpisane wartości?
Czy są jakieś powody, aby używać typu unsigned
, gdy pojemność zwykłego modelu signed
jest wystarczająca (i często więcej niż wystarczająca)?
Osobiście staram się używać zwykłych typów, ponieważ:
int
jest chyba trochę bardziej czytelne niżuint
lubunsigned int
- I nie muszą zawierać dodatkowe nagłówki
UINT
itp - Unikać dodatkowych rzutów gdzieś dalej w programie
Powodów do korzystania z unsigned
typ I mogę sobie wyobrazić:
- pomoc kompilator wygenerował lepszy kod?
- pomóc innym programista zrozumieć, że zmienna jest unsigned
- uniknąć ewentualnych błędów (na przykład, gdy int jest przypisany do UINT kompilator prawdopodobnie wygeneruje błąd kompilacji i powinniśmy sprawdzić tę wartość możemy przypisać nie jest ujemna)
Kilka przemyśleń na ten temat tutaj: http://embeddedgurus.com/stack-overflow/2009/08/a-tutorial-on- signed-and-unsigned-integers/ – Morwenn
dzięki, również znalazłem to pytanie właśnie teraz http://stackoverflow.com/questions/12225521/should-unsigned-ints-be-used-if-not-necessary?rq= 1 – javapowered
Nie. Istnieją pewne argumenty przemawiające za używaniem 'unsigned' - Stroustrup nawiązuje do tego przy okazji w języku programowania C++ gdzieś - Lakos odszedł i napisał rozdział na ten temat w jednej ze swoich książek: nużącej. Przykładowe problemy: jeśli masz wartości a i b, 'abs (a-b)' działa intuicyjnie dla ints, ale nie bez znaku; Warto zauważyć, że konwersje standardowe mogą być wykonywane cicho, więc kontrole, które można uzyskać, korzystając z funkcji unsigned, i tak nie działają - wartości ujemne stają się po cichu ogromne i na odwrót. –