Kdy použít nepodepsané hodnoty než ty podepsané?

hlasů
66

Kdy je vhodné použít nepodepsané proměnné přes podepsané jeden? Co do forsmyčky?

Slyšel jsem spoustu názorů na to a chtěl jsem zjistit, jestli existuje něco, co se podobá konsensu.

for (unsigned int i = 0; i < someThing.length(); i++) {  
    SomeThing var = someThing.at(i);  
    // You get the idea.  
}

Vím, že Java nemá nepodepsané hodnoty, a že musel být vědomý rozhodnutí o společnosti Sun Microsystems části.

Položena 02/08/2008 v 04:34
zdroj uživatelem
V jiných jazycích...                            


5 odpovědí

hlasů
61

Byl jsem rád, že najít dobrý rozhovor na toto téma, jak jsem se opravdu dána to hodně myslel předtím.

Souhrnně lze říci, podepsal je dobrá obecná volba - i když jsi mrtvý, zda jsou všechna čísla jsou pozitivní - pokud se chystáte dělat aritmetiku na proměnné (stejně jako v typické pro případ smyčky).

Pokud se chystáte dělat věci, jako bitové masky, nepodepsané začíná dávat větší smysl. Nebo, pokud jste se zoufale snaží dostat, že další pozitivní rozsah využitím bitu znaménka.

Osobně jsem rád podepsal, protože nevěřím sám zůstat konzistentní a vyhnout se smíchání obou typů (podobně jako článek varuje před).

Odpovězeno 02/08/2008 v 04:49
zdroj uživatelem

hlasů
8

Ve svém výše uvedeném příkladu, kdy ‚i‘ bude vždy kladný a vyšší rozsah by bylo přínosné, unsigned by bylo užitečné. Stejně jako v případě, že používáte ‚deklarovat‘ příkazy, jako například:

#declare BIT1 (unsigned int 1)
#declare BIT32 (unsigned int reallybignumber)

Zvlášť, když se tyto hodnoty nikdy nezmění.

Nicméně, pokud děláte účetní program, ve kterém lidé jsou nezodpovědní s penězi a jsou stále v červených číslech, budete určitě chtít použít ‚podepsal‘.

Souhlasím s světce, i když to dobré pravidlo je použít podepsal, kde C vlastně výchozí, takže jste se vztahuje.

Odpovězeno 02/08/2008 v 05:31
zdroj uživatelem

hlasů
7

Řekl bych, že pokud váš obchodní případ vyžaduje, aby záporné číslo je neplatné, budete chtít mít chybu zobrazenou nebo hozen.

S tím na mysli, jsem se teprve nedávno dozvěděl o celých čísel bez znaménka, zatímco pracuje na zpracování projektu dat v binárním souboru a ukládání dat do databáze. Byl jsem záměrně „kazit“ binární data, a skončil dostat do záporných hodnot namísto očekávané chyby. Zjistil jsem, že i přesto, že hodnota převedená hodnota nebyla platná pro můj obchodního případu.
Můj program to není chyba, a já jsem skončil dostat chybných údajů do databáze. Bylo by bývalo lepší, kdybych použil uinta měl program selže.

Odpovězeno 10/11/2008 v 20:04
zdroj uživatelem

hlasů
7

C a C ++ kompilátory bude generovat upozornění při porovnávání podepsané a nepodepsané typy; v příkladu kódu, nemohli byste, aby vaše smyčky variabilní bez znaménka a mají kompilátor generovat kód, bez varování (za předpokladu, řekl varování byly zapnuty).

Samozřejmě, že jste kompilaci s varováním obrátil celou cestu nahoru, ne?

A Uvažovali jste kompilace „léčit upozornění jako chyby“, aby to, že o krok dál?

Nevýhodou při používání podepsané čísel je, že je tu pokušení k jejich přetížení, takže například hodnoty 0-> n jsou menu a -1 nic neznamená to zvoleno - spíše než vytvářet třídu, která má dvě proměnné, jeden uveďte, zda je vybrána něco jiného a pro ukládání, co to volba je. Než se nadějete, budete testování negativního všude možně a kompilátor stěžuje, jak budete chtít porovnat výběr z nabídky proti počtu nabídek výběry máte - ale to je nebezpečné, protože jsou různé typy , Tak nedělají.

Odpovězeno 04/08/2008 v 14:35
zdroj uživatelem

hlasů
6

size_tČasto je dobrou volbou pro to, nebo size_typepokud používáte třídu STL.

Odpovězeno 02/08/2008 v 06:51
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more