Gibt Null für negative ganze Zahlen zurück

7

Ein Freund wirft einfach einen Code ähnlich dem folgenden C # -Code:

%Vor%

Das hat mich zum Nachdenken gebracht. Gibt es einen "anderen" Weg, um Null für negative ganze Zahlen oder einen aktuellen positiven Wert zurückzugeben? Genauer gesagt suche ich, wenn möglich, nach bitweisen Operationen.

Übrigens, mir ist Math.Max(0, i);

bekannt     
Rubens Farias 05.11.2009, 19:40
quelle

5 Antworten

25

Was stimmt nicht mit Math.Max ?

Sie können das Äquivalent ohne eine Verzweigung mit bitweisen Operationen ausführen:

%Vor%

Wenn Sie null ersetzen, wird es zu:

zusammengebrochen %Vor%

(Quelle: diese Liste mit bitweisen Tricks.)

Wenn Filialen auf Ihrer Plattform extrem teuer wären, könnte sich das in einer inneren Schleife lohnen, nehme ich an, aber es ist ziemlich unklar und nicht die Art von Dingen, die ich außerhalb eines extrem zeitabhängige Funktion.

    
Tim Sylvester 05.11.2009, 19:49
quelle
4

Wie wäre es mit:

int i = ...;

Rückgabe i & amp; ~ (i & gt; & gt; 31);

    
Aaron 05.11.2009 19:52
quelle
4

Das Folgende wird den Trick machen und der Code liest sich so gut es praktisch keinen Kommentar benötigt;)

%Vor%

dann wieder

%Vor%

und voila Null für alle negativen Zahlen und alle positiven bleiben unverändert

    
Rune FS 05.11.2009 21:52
quelle
3

Kurze Antwort: Nein.

Bitoperatoren machen etwas ganz anderes oder werden vielmehr für verschiedene Probleme verwendet.

Wenn Sie die Größe Ihrer Ganzzahlen kennen, könnten Sie das höchste (höchstwertige) Bit testen; Wenn es 1 ist, ist die Zahl negativ und Sie können darauf reagieren. Aber das wäre viel mehr Arbeit als das einfache "& lt;" testen.

    
Carl Smotricz 05.11.2009 19:46
quelle
3

Nicht bitweise, sondern anders:

%Vor%

BEARBEITEN:

%Vor%     
Kai Huppmann 05.11.2009 19:51
quelle

Tags und Links