Mikor kell használni előjel nélküli értékek felett aláírt ezek?

szavazat
66

Mikor ez megfelelő egy aláíratlan változó, mint egy aláírt egy? Mi a helyzet a forhurok?

Hallom, egy csomó véleményt erről, és azt akartam, hogy lássa, van-e valami hasonló konszenzus.

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

Tudom, Java nincs előjel nélküli értékeket, és hogy lehetett tudatos döntés Sun Microsystems részéről.

A kérdést 02/08/2008 04:34
a forrás felhasználó
Más nyelveken...                            


5 válasz

szavazat
61

Örültem, hogy megtalálja egy jó beszélgetés erről a témáról, mert én nem igazán adott sokkal korábban gondoltuk.

Összefoglalva, aláírt egy jó általános választás - még ha halott róla, hogy a számok pozitív - ha akarsz csinálni aritmetikai a változó (mint egy tipikus hurok esetén).

Ha meg akarsz csinálni a dolgokat, mint bitenkénti maszkok, aláíratlan kezdődik, hogy több értelme van. Vagy, ha kétségbeesett, hogy az extra pozitív tartományban kihasználva az előjel bit.

Én szeretem alá, mert nem bízom magamban, hogy maradjon következetes, és ne úgy, hogy a két típus (mint a cikk óv).

Válaszolt 02/08/2008 04:49
a forrás felhasználó

szavazat
8

Az Ön fenti példában, ha az „i” mindig pozitív, és nagyobb tartományban előnyös lenne, aláíratlan hasznos lenne. Mint ha használja declare nyilatkozatok, mint például:

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

Különösen akkor, ha ezek az értékek soha nem fog megváltozni.

Azonban, ha csinálsz egy könyvelési program, ahol az emberek felelőtlenek a pénzüket, és állandóan a piros, akkor egészen biztosan szeretné használni „aláírt”.

Egyetértek szent azonban, hogy egy jó ökölszabály az, hogy az aláírt, ami C tulajdonképpen az alapértelmezett, így te vonatkozik.

Válaszolt 02/08/2008 05:31
a forrás felhasználó

szavazat
6

size_tgyakran jó választás ez, vagy size_typeha használja STL osztályban.

Válaszolt 02/08/2008 06:51
a forrás felhasználó

szavazat
7

C és C ++ fordító figyelmeztetést generál, ha összehasonlítjuk előjeles és előjel nélküli típusok; a példa kód, akkor nem teszi a ciklusváltozó előjel nélküli, és a fordító generál kódot figyelmeztetés nélkül (feltételezve, hogy az említett figyelmeztetések be van kapcsolva).

Természetesen te összeállítása figyelmeztetésekkel fordult egészen, igaz?

És Van úgy összeállítása a „kezelni figyelmeztetésekre hibák”, hogy azt, hogy egy lépéssel tovább?

A hátránya használatával aláírt számok, hogy van egy kísértés, hogy túlterheli őket úgy, hogy például az értékek 0-> n a menüket, és a -1 semmi nem választott - létrehozása helyett egy osztály, amely két változó, az egyik jelzik, ha valami van, és egy másik, hogy tárolja, mi, hogy a kiválasztás. Mielőtt te is tudod, akkor teszteljük negatív egész hely, és a fordító nem panaszkodik, hogy hogyan akarják, hogy hasonlítsa össze a menü kiválasztása ellen száma menüválasztásokat van - de ez veszélyes, mert ők a különböző típusú . Tehát ne csináld.

Válaszolt 04/08/2008 14:35
a forrás felhasználó

szavazat
7

Azt gondolom, hogy ha a vállalkozás esetében azt diktálja, hogy a negatív szám érvénytelen, akkor szeretnénk , hogy egy hiba jelenik meg, vagy dobni.

Ezt szem előtt tartva, azt csak a közelmúltban megtudtam előjel nélküli egész számot, miközben dolgozik a projekt adatok feldolgozására egy bináris fájlt, és tárolja az adatokat egy adatbázisba. Én szándékosan „bomlasztó” a bináris adatok, és végül egyre negatív értékek helyett egy várt hiba. Azt találták, hogy bár a átalakított érték, az érték nem volt érvényes az én üzleti ügyben.
Saját program nem hiba, és én végül kapok rossz adatokat az adatbázisba. Ez jobb lett volna, ha én is használta uint, és volt a program nem.

Válaszolt 10/11/2008 20:04
a forrás felhasználó

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