Wenn Werte ohne Vorzeichen über unterzeichnet diejenigen zu benutzen?

stimmen
66

Wenn angemessen ist es eine nicht signierte Variable über einen unterzeichneten zu benutzen? Was ist in einer forSchleife?

Ich höre viele Meinungen darüber, und ich wollte sehen, ob es etwas, einen Konsens ähnlich war.

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

Ich weiß , dass Java nicht Werte ohne Vorzeichen hat, und das muss eine bewusste Entscheidung gewesen , Sun Microsystems 'Teil.

Veröffentlicht am 02/08/2008 um 04:34
quelle vom benutzer
In anderen Sprachen...                            


5 antworten

stimmen
61

Ich war froh , zu finden ein gutes Gespräch zu diesem Thema, da ich nicht wirklich gegeben hatte es vor viel gedacht.

Zusammengefasst allgemeine Wahl ist eine gute unterzeichnet - auch wenn bist du tot sicher, dass alle Zahlen positiv sind - wenn Sie auf der Variable zu tun Arithmetik gehen (wie in einem typischen for-Schleife Fall).

Wenn Sie vorhaben, bitweise Dinge wie Masken zu tun, ohne Vorzeichen beginnt zu mehr Sinn zu machen. Oder, wenn Sie sind verzweifelt, dass zusätzliche positiven Bereich zu erhalten, indem die Vorteile des Vorzeichenbits nehmen.

Persönlich mag ich unterschrieben, weil ich mich nicht trauen konsequent zu bleiben und zu vermeiden, dass die beiden Arten Mischen (wie der Artikel warnt vor).

Beantwortet am 02/08/2008 um 04:49
quelle vom benutzer

stimmen
8

In Ihrem Beispiel oben, wenn ‚i‘ immer positiv sein und eine höhere Reichweite von Vorteil wäre, wäre ohne Vorzeichen nützlich sein. Wie wenn Sie mit ‚declare‘ Aussagen, wie:

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

Vor allem, wenn diese Werte ändern sich nie.

Wenn Sie jedoch ein Buchhaltungsprogramm tun, wo die Menschen mit ihrem Geld verantwortungslos sind und sind ständig in den roten Zahlen, werden Sie auf jeden Fall wollen ‚unterzeichnet‘ verwenden.

Ich mit saint zustimmen aber, dass eine gute Daumenregel zu verwenden, unterzeichnet ist, die C tatsächlich standardmäßig, so dass Sie abgedeckt.

Beantwortet am 02/08/2008 um 05:31
quelle vom benutzer

stimmen
7

Ich würde denken , dass , wenn Ihr Business Case schreibt vor, dass eine negative Zahl ist ungültig, würden Sie wollen , um einen Fehler haben gezeigt oder geworfen.

Vor diesem Hintergrund fand ich gerade erst vor kurzem über ganze Zahlen ohne Vorzeichen aus , während an einem Projekt der Verarbeitung von Daten in einer Binärdatei arbeiten und die Daten in eine Datenbank zu speichern. Ich war absichtlich „verderblichen“ die Binärdaten, und schließlich negative Werte bekommen statt eines erwarteten Fehler. Ich fand , dass , obwohl der Wert umgerechnet, der Wert für mein Geschäft Fall nicht gültig war.
Mein Programm hat Fehler nicht, und ich am Ende immer falsche Daten in die Datenbank. Es wäre besser gewesen , wenn ich benutzt hatte , uintund hatte das Programm fehlschlagen.

Beantwortet am 10/11/2008 um 20:04
quelle vom benutzer

stimmen
7

C und C ++ Compiler erzeugt eine Warnung, wenn Sie mit und ohne Vorzeichen Typen vergleichen; in Ihrem Beispiel-Code, können Sie Ihre Schleife Variable ohne Vorzeichen nicht und haben die Compiler ohne Warnungen generieren Code machen könnten (wobei unter der Annahme, auf Warnungen wurden gedreht).

Natürlich Sie Kompilieren mit Warnungen drehte den ganzen Weg nach oben, nicht wahr?

Und, haben Sie mit „behandeln Warnungen als Fehler“ betrachtet kompilieren, es zu nehmen, dass ein Schritt weiter?

Der Nachteil mit signierten Zahlen ist, dass es eine Versuchung, sie zu überlasten, so dass zum Beispiel die Werte 0-> n die Menüauswahl sind, und -1 bedeutet nichts ausgewählt wird - anstatt eine Klasse erstellen, die zwei Variablen hat, eine zu etwas ausgewählt angeben, ob und ein anderer zu speichern, was das Auswahl ist. Bevor Sie es kennen, sind Sie testen für negative ganz über dem Platz und der Compiler beschwert sich darüber, wie Sie wollen, um die Menüauswahl gegen die Anzahl der Menüauswahl vergleichen Sie haben - aber das ist gefährlich, weil sie unterschiedliche Typen sind . So tun das nicht.

Beantwortet am 04/08/2008 um 14:35
quelle vom benutzer

stimmen
6

size_thierfür ist oft eine gute Wahl, oder size_typewenn Sie eine STL - Klasse verwenden.

Beantwortet am 02/08/2008 um 06:51
quelle vom benutzer

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