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
array of bits -> byte komische Nebenwirkung
-
- 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
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...
Re: array of bits -> byte komische Nebenwirkung
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
-
- 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
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>)
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein