/ / Warum gibt mir die Verwendung des '~' Operators in Scala einen negativen Wert - Scala, logische Operatoren

Warum gibt mir der Operator '~' in scala einen negativen Wert - scala, logische Operatoren

Ich bin neu bei Scala und habe versucht, auf die Website zuzugreifenScala nicht Betreiber. Ich habe erfahren, dass ich den Operator "-" für die logische NICHT-Verknüpfung verwenden kann. Aber manchmal gibt mir dieser Operator eine negative Antwort wie (-1)

Beispielsweise :

 val x = 1
val y =(~x)

Hier gibt mir der Wert y eine -1 anstelle einer 0. Aber ich brauche die Antwort in Form einer 1 oder einer 0. Kann mir jemand sagen, was ich hier vermisse? Danke im Voraus für Ihre Hilfe.

Antworten:

9 für die Antwort № 1

Im Gegensatz zu vielen anderen Sprachen unterstützt Scala die Verwendung von Zahlen oder anderen Arten von Werten in Kontexten, in denen ein Boolescher Wert erwartet wird, nicht. Beispielsweise wird keine der folgenden Zeilen kompiliert:

if (1) "foo" else "bar"
if ("1") "foo" else "bar"
if (List(1)) "foo" else "bar"

Einige Sprachen haben eine Vorstellung von "Wahrhaftigkeit", die hier verwendet wird, um zu bestimmen, ob die Bedingung zutrifft, Scala jedoch nicht - wenn Sie einen Booleschen Wert möchten, müssen Sie a verwenden Boolean.

Dies bedeutet, dass gewöhnliche logische Negation für Zahlen und keinen Sinn ergibt ~ ist etwas völlig anderes - es gibt dir bitweise Negation, was nicht das ist, was du willst. Stattdessen scheint es wahrscheinlich, dass du so etwas willst:

val x = 1
val nonzeroX = x != 0
val y = !nonzeroX

Das heißt, Sie wandeln Ihre Zahl explizit in einen Booleschen Wert um und arbeiten dann mit der logischen Standardnegation (!).


3 für die Antwort № 2

~ ist bitweise Negation, das heißt, es braucht jedes Bit vondie angegebene Zahl und negiert sie, wobei jedes 0-Bit in ein 1-Bit und jedes 1-Bit in ein 0-Bit umgewandelt wird. Da das erste Bit einer vorzeichenbehafteten Zahl ihr Vorzeichen angibt (0 für positive Zahlen, 1 für negative), werden positive Zahlen und Null negativ (und umgekehrt).

Wenn Sie eine einfache logische Negation wünschen, verwenden Sie einfach Boolesche Werte und !.

PS: Beachten Sie, dass in dem von Ihnen geposteten Code der Wert von y wird sein -2nicht -1 wie du in deinem Beitrag geschrieben hast.


2 für die Antwort № 3

Wenn Sie es nur konvertieren möchten 0 zu 1 oder umgekehrt können Sie verwenden ^ (XOR) Operator.

val x = 1
val y = 1^x