PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Null Werte und 3 Wertige logik


Mr.Freemind
2007-07-18, 10:23:51
Mosche,

ich habe Fragen bezüglich dieser Ausdrücke ich komm einfahc nicht auf den Drichter wie das geht bzw. habe 2 Arten wie ich das lösen könnte.

http://img512.imageshack.us/img512/6629/logikzs7.jpg

Es gibt ja zu den Ausdrücken AND OR NOT gewissen Tabellen, nur meine Frage ist wie verfahre ich nun bei diesen Beispielen.

Also zu Ausdruck y>5 And X>5. y>5 ist true . x>5 dort steht dann x hat den Wert Null, ist das ein false oder setze ich das null in den x wert ein, dann würde ich ja unknown bekommen also habe ich 2 Arten und auhc 2 Ausdrücke.

1. true and false---> false
true and unknown---> unknown

Bin um jede Hilfe sehr Dankbar.

MfG

Mr.Freemind

Der_Donnervogel
2007-07-18, 12:45:23
Die Lösung dort müßte unknown sein, denn NULL>5 ist nicht false, sondern eben unknown. NULL ist ja kein numerischer Wert und kann folglich nicht mit einem numerischen Wert verglichen werden, da ein solcher Vergleich nicht definiert ist. Folglich kommt da unknown raus.

Kniffliger wird es dann bei X = NULL (ich nehme an das soll ein Vergleich sein, da auch die restliche Syntax irgendwie BASIC-mäßig ausschaut). Da weiter unten noch das Schlüsselwort IS vorkommt nehme ich an, daß = nicht für Vergleiche mit NULL definiert ist. Da hilft nur ein Blick in die Unterlagen, wie das genau definiert ist.

Monger
2007-07-18, 12:55:03
NULL ist ja nunmal sprachenabhängig. In Pascal heißt es nil, in VB nothing, in Java und C# null, und in C++ ist iirc ein Typ tatsächlich mit 0 vorinitialisiert.

Und dann gibt es noch Unterschiede zwischen Java und C#, wo im ersteren Fall ein int tatsächlich ein elementarer Typ ist, während in C# ein Integer ein Objekt ist wie jedes andere auch. In Java kann ein int nicht null werden, in C# schon.


Ohne mehr Infos ist die Aufgabe imho nicht eindeutig lösbar. Man müsste schon wissen, was mit null genau gemeint ist.

Mr.Freemind
2007-07-18, 13:09:04
Hey danke euch beiden, es handelt isch hier um SQL. Das Resultat ist tatsächlich unknown.


MfG

Mr.Freemind

Der_Donnervogel
2007-07-18, 13:18:28
Ja, die Definition wäre schon hilfreich.

Ich vermute aber aufgrund der Aufgabenstellung, daß man hier nicht kompliziert denken muß. Das ist wohl eine Verständnisaufgabe und es steht ja schon in der Threadüberschrift, daß es hier um 3-wertige Logik geht. Folglich drängt sich der logische Schluß auf, daß die Aufgabe so gestellt wurde, daß bei ein paar Sachen eben "unknown" herauskommt und kann ziemlich sicher ausschließen, daß ein Vergleich zwischen int und NULL hier als false gewertet wird. Genau aus diesem Hintergedanken heraus bin ich zu meiner Antwort gekommen.

Ansonsten hat aber Monger natürlich völlig recht, daß die Informationen eigentlich nicht ausreichend sind, zumal mir die "Sprache" auch nicht bekannt vorkommt.

Edit: Ok an SQL hab ich bei sowas jetzt nicht gedacht. ;)

Coda
2007-07-18, 14:00:35
und in C++ ist iirc ein Typ tatsächlich mit 0 vorinitialisiert.
Er ist gar nicht vorinitialisiert.

Expandable@work
2007-07-18, 15:25:38
in C++ ist iirc ein Typ tatsächlich mit 0 vorinitialisiert.
In C++ ist null ein Makro für 0, der Compiler sieht also nur 0.
Und dann gibt es noch Unterschiede zwischen Java und C#, wo im ersteren Fall ein int tatsächlich ein elementarer Typ ist, während in C# ein Integer ein Objekt ist wie jedes andere auch.


In C# ist ein int ebenfalls ein elementarer Typ. Es findet lediglich ein automatisches Boxing/Unboxing in System.Int32 statt. Elementare Datentypen wie int, float, double, usw. als Objekte zu behandeln, ist einfach viel zu langsam.

Monger
2007-07-18, 17:49:41
Er ist gar nicht vorinitialisiert.

Heißt das, da steht ein Zufallswert drin? Was halt grade an der Speicherstelle stand?

Xmas
2007-07-18, 20:18:23
Ich glaube was Coda sagen wollte ist dass in C++ Variablen nicht vorinitialisiert sind.

NULL ist schlicht 0.

Neomi
2007-07-18, 20:34:58
Heißt das, da steht ein Zufallswert drin? Was halt grade an der Speicherstelle stand?

#define NULL 0

Das ist schon alles, was dahintersteckt. NULL hat keine Adresse im Speicher, es ist keine Variable. Und das Makro ist auch nicht per Default definiert.

Novox
2007-07-18, 20:40:20
In Java kann ein int nicht null werden, in C# schon.

"int" kann auch in C# nicht null sein (siehe Expandables Antwort), "int?" hingegen schon.

Expandable
2007-07-18, 21:55:08
Heißt das, da steht ein Zufallswert drin? Was halt grade an der Speicherstelle stand?

Ja. Manche Compiler initialisieren Variablen aber im Debug-Modus vor. Ist ja auch sinnvoll. In C(++) muss so z.B. bei einer Array-Deklaration der Form int[100] nur der Speicherplatz reserviert werden - in Java hingegen, wo überall 0 reingeschrieben wird, muss das ganze Array durchgelaufen und initialisiert werden (-> wesentlich langsamer bei großen/vielen Arrays).