2016-09-21 3 views
-1

Ich möchte erhalten das Zeichen einer Zahl ohne eine logische Anweisung. Bereits eine vordefinierte Methode ist verfügbar Math.Sign(). Aber ich muss in meinem eigenen Stil implementieren.Erhalten Sie Zeichen einer Zahl ohne logische Anweisung in C#

Die Versuchte C# Code:

public int GetSign(int value) 
{ 
    int bitFlag = 1; 

    var m = Convert.ToString(value, 2); 
    int length = m.Length; 

    if (m[length - 1] == '1') 
    { 
     bitFlag = -1; 
    } 

    return bitFlag; 
} 

Zustand:

  • Wenn das letzte Bit 1 dann -1
  • zurückkehren, wenn das letzte Bit 0 dann 1
zurückkehren

Mit freundlichen Grüßen sist mir, wie die oben IF Statement entfernen ...

+0

Wie korreliert die "Bedingung" mit dem Vorzeichen von Zahlen und 'Math.Sign()'? Sie überprüfen, ob die Zahl ungerade oder gerade ist, nicht ihr Vorzeichen. – zerkms

+1

_ "Ich muss in meinem eigenen Stil implementieren" _ - warum? Was _spezifisches_ Problem versuchen Sie hier zu lösen? Was ist mit 'Math.Sign()' falsch? Gibt es irgendwelche Einschränkungen für Ihre gewünschte alternative Implementierung? Warum ist deine Version so verworren? Was ist falsch mit 'Rückgabewert <0? -1: (Wert> 0? 1: 0); '(also warum _" ohne eine logische Aussage "_)? –

Antwort

7

Interessante an Bitverschiebung: Wenn Sie rechts die Bits verschieben, wird das führende Bit propagiert werden auf der rechten Seite.

Beispiel Byte: 10000000 Beispiel Byte >> 1: 11000000

Integers nehmen 32 Bits darzustellen. Was passiert also, wenn wir die Bits um 31 Stellen verschieben? Das führende Bit wird immer weitergegeben, dh alle positiven Zahlen werden 0 und alle negativen Zahlen werden -1.

Deshalb:

public static int signOfInt(int input) 
{ 
    return (input >> 31); 
} 

0 zurück für positive Zahlen und -1 für negative Zahlen.

+0

Um genau die Bedingungen von die Frage, es müsste "Return 2 * (Input >> 31) + 1;" sein, aber ich nehme an, dass der letzte Teil trivial ist, da die Antwort akzeptiert wurde. – Jaquez

0

Ich denke, das wird es tun

public int GetSign(int value) 
{ 
    return -(((value & 1) << 1) - 1); 
} 
+0

1 gibt 1 statt -1 zurück: http://ideone.com/U4rfYc – Backs

+0

Bitte überprüfen Sie mit Nummer '3' und' -3' dann '500 'und' -500' ... –

Verwandte Themen