Operator NOT

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Re: Operator NOT

Beitrag von Thorium »

TomS hat geschrieben: Außerdem: Was heißt alle Bits werden umgekehrt? Dann ist das Ergebnis doch das Maximale für den jeweiligen Typ.

Für einen Typ, der aus 2 Bits besteht: XX
0=00
1=01
2=10
3=11 (Alle Bits wurden von 0 auf 1 gekippt -> Ergebnis ist 3)
Es gibt in PureBasic keinen Typ der aus 2 Bits besteht. Minimum sind 8 Bit also 1 Byte. Wobei der Standarttyp Integer ist: 32bit bei x86 und 64bit bei x64. -1 weil es keinen vorzeichenlosen Integertyp in PB gibt.
STARGÅTE hat geschrieben: Du meinst das Binäre NOT : nämlich die ~
Dort ist ~0 = -1

Aber das Schlüsselwort NOT ist kein binärOperator
Ja richtig, sorry, mein Fehler.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: Operator NOT

Beitrag von Josh »

es geht mir ja da mehr ums prinzip. dass in basic das zeichen "=" einerseits als zuweisungsoperator und andererseits als vergleichsoperator verwendet wird, ist mal ein grundsätzliches problem bei basic.
STARGÅTE hat geschrieben:kann ich die Aussage A = B auch als Variable speichern
sorry, deiner aussage kann ich jetzt leider nicht folgen. woraus soll sich da ein resultat ergeben, dass ich in einer variablen speichern kann?

im gegensatz dazu ergibt NOT aber sehr wohl ein resultat, dass ich folglich dann ja auch in einer variablen speichern kann.

durch das if ist ja festegelegt, dass es sich um einen vergleichs und nicht um einen zuweisungsoperator handelt. also ich kann ja total daneben liegen, aber nach meiner vorstellung wird ein if befehl wie folgt aufgelöst

IF 2 = 3 AND 3 = 3
IF false AND true
IF false

bei mir setzt es da halt aus, warum ich ein ergebnis:
- dass ich berechnen kann
- dass ich mit debug anzeigen kann
- dass ich mit dem MessageRequester ausgeben kann
nicht in einer variable speichern kann.

Code: Alles auswählen

Debug #True Or #False
b = #True Or #False
Debug b
MessageRequester("", Str(#True Or #False))
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Re: Operator NOT

Beitrag von Thorium »

Gerade im englischen Forum gelesen das soetwas in Planung ist: http://www.purebasic.fr/english/viewtop ... 8&start=19
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Re: Operator NOT

Beitrag von TomS »

Thorium hat geschrieben:Es gibt in PureBasic keinen Typ der aus 2 Bits besteht. Minimum sind 8 Bit also 1 Byte.
Schon klar. Aber auch bei 8 bit wird aus 0 11111111 wenn man alle Bits umdreht. Mir ging's um's Prinzip.
Thorium hat geschrieben:-1 weil es keinen vorzeichenlosen Integertyp in PB gibt.
Das heißt es werden eigentlich nur 31/63 für die Zahl verwendet und ein Bit für's Vorzeichen? Müsste dann bei 32 bit Integer nicht 2^31*(-1) = -2147483648 rauskommen anstatt -1?
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Re: Operator NOT

Beitrag von Thorium »

TomS hat geschrieben: Schon klar. Aber auch bei 8 bit wird aus 0 11111111 wenn man alle Bits umdreht. Mir ging's um's Prinzip.
Das kommt auf den Typ drauf an by .b hast du hier auch -1 beim neuen (PB 4.40) Typ .a hast du hier 255.
TomS hat geschrieben: Das heißt es werden eigentlich nur 31/63 für die Zahl verwendet und ein Bit für's Vorzeichen?
Genau.
TomS hat geschrieben: Müsste dann bei 32 bit Integer nicht 2^31*(-1) = -2147483648 rauskommen anstatt -1?
Nein. Das letzte Bit gibt das Vorzeichen an, ist es gesetzt wird quasie rückwärts gezählt.

Also:
1 1 1 1 1 1 1 1 = -1
0 1 1 1 1 1 1 1 = 127
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Re: Operator NOT

Beitrag von TomS »

Aha. Das heißt im Umkehrschluss 0 1 1 1 1 1 1 1 = - 127?
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: Operator NOT

Beitrag von DarkDragon »

Angenommen du willst 127 zu -127 machen, dann invertierst du die Bits von 127 und addierst 1 dazu:

Code: Alles auswählen

127
0111 1111
1000 0000 + 1
1000 0001
-127 ist demnach 1000 0001 im Zweierkomplement.
Und -1 ist 1111 1111 ;-)

Natürlich geht das auch andersrum.

Code: Alles auswählen

test.b = %11111111
Debug test
Probier einfach mal selbst rum. Normalerweise würde ich dir jetzt den Zweierkomplementring zeigen, aber ich find grad kein Bild im Netz.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Re: Operator NOT

Beitrag von TomS »

Äh. Mein Post von vorhin war kompletter Murks. Ich meinte natürlich 10000000.
Ah, Ok. also noch +1.
Ok, Ok. Jetzt hab ich's wohl kapiert. Danke :)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Operator NOT

Beitrag von Kaeru Gaman »

zum Vorzeichenbit:
das verhalten des Bytes bleibt identisch, egal ob es signed oder unsigned interpretiert wird.
also, wenn man immer um +1 erhöht, und das byte ist voll, erhält man wieder 0.
wenn das höchste bit als Vorzeichen interpretiert wird, dann darf sich dieses verhalten nicht ändern,
außerdem muss -1 +1 ja 0 ergeben.

wenn man also alle bits gesetzt hat außer dem höchsten, und addiert 1,
dann wird das höchste bit gesetzt und alle anderen gelöscht,
und diese zahl muss dann die allerkleinste negative zahl dieses typs sein.

wenn man das erstmal gefressen hat, ist es so logisch, dass man garnicht mehr anders denken kann.


zum Not
in PureBasic gibt es zwei Typen Logische Operatoren,
die Vergleichsoperatoren und die Arithmetischen Operatoren.
And, Or, Xor und Not gehören nur in Vergleiche,
& | ! und ~ sind für Bit-Operationen.

in manchen Sprachen kann man Logische Operatoren und Vergleiche in einem Term verwenden.
dort erhält dann der Term (A=5) den Wert #True, wenn A fünf ist, und #False wenn A etwas anderes ist.
in PureBasic ging das noch nie und geht bisher auch nicht, allerdings ist geplant, eine Boolean()-Funktion hinzuzufügen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten