array of bits -> byte komische Nebenwirkung

Für Fragen von Einsteigern und Programmieranfängern...
siro
Beiträge: 730
Registriert: Di 23. Aug 2016, 14:25
OS, Lazarus, FPC: Windows 11
CPU-Target: 64Bit
Wohnort: Berlin

Re: array of bits -> byte komische Nebenwirkung

Beitrag von siro »

Hier ist ja eine Beschreibung:

http://wiki.freepascal.org/Variables_and_Data_Types

Type Bytes Ord(True)
Boolean 1 1
ByteBool 1 Any nonzero value
WordBool 2 Any nonzero value
LongBool 4 Any nonzero value

Das hatte ich gesucht :wink:
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: array of bits -> byte komische Nebenwirkung

Beitrag von wp_xyz »

marcov hat geschrieben:FPC hat 2 boolean typen, und deren Logic kann man nicht ändern.

ich weiß nicht, bin auf jeden Fall mächtig verwirrt.

Das ist doch nur Theorie. Sobald man damit zu tun hat, dass hinter dem Typen Boolean mit seinen beiden Zuständen auch nur nur Bits und Bytes stecken, stößt man auf das Problem, dass
(1) der Typ Boolean 1 Byte groß ist
(2) 1 Byte aus 8 Bits mit insgesamt 256 möglichen Werten besteht.
Also muss man die 256 Werte irgendwie den beiden Boolean-Werten zuordnen. Da verliert eine Aussage "TRUE = 1" ihren Sinn. Was ist, wenn in dem Byte, das als BOOLEAN umgewandelt wird, zufällig der Wert 2 steht? Wenn dies streng geprüft würde, dann müsste das folgende Programm in den letzten beiden Zeilen abstürzen. - Macht es nicht, auch mit allen Checks gesetzt. Wenn TRUE nur 1 sein kann, wieso "weiß" das TRUE von "boolean(2)" dann noch, dass es aus der 2 erzeugt worden ist?

Code: Alles auswählen

program Project1;
begin
  WriteLn(TRUE);                 // --> TRUE
  WriteLn(ord(TRUE));            // --> 1
 
  WriteLn(boolean(2));           // ---> TRUE
  WriteLn(ord(boolean(2)));      // ---> 2
end.   


Ich denke, das einzige, das bei der binären Darstellung von Boolean's sicher ist, dass der Wert 0 dem Boolean-Wert FALSE entspricht, und alle anderen Werte TRUE sind

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: array of bits -> byte komische Nebenwirkung

Beitrag von Socke »

Die Aussage Ord(True) = 1 steht damit nicht im Widerspruch. Hier wurde ja nur eine Aussage über den Wert des Wortes True getätigt, nicht aber über den Wert von ord(<ein anderer Wert, der zu True äquivalent ist>) :D
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Antworten