true wird intern so ziemlich immer als 1 und false als 0 abgebildet, um das logische UND als bitweises UND und das logische ODER als bitweises ODER zu verwenden.
In Java ist die Zuweisung true=1 oder false=0 sinnlos. Löse dich von dieser Vorstellung, je schneller desto besser. Sie ist nicht hilfreich, und neigt nur dazu dich zu verwirren.
Die Zuweisung "True = 1 = Spannung ein" ist eine reine Definitionssache. Die boolsche Algebra kennt keine numerischen Ausdrücke 0 oder 1 oder andere.
Es gibt natürlich Fälle, in denen eine solche Zuweisung sinnvoll oder gar notwendig ist. Dennoch ist eine gedankliche Trennung zwischen der eigentlichen Theorie und der Mathematik wichtig für das Verständnis. Beides zu vermischen mag als Gedankenkrücke anfänglich sinnvoll erscheinen, diese kann einem aber auch ganz schnell mal fürchterlich auf die Füße fallen. Spätestens dann, wenn z.B. eine andere Zuweisung sinnvoller ist.
In C (im Unterschied zu Java kommt man da an solche Mechanismen noch ran) ist false als 0 definiert, und true als nicht 0. Es KANN 1 sein, genausogut aber auch -1. Oder 2, 3, ...
In C wird das teilweise genutzt, um gleich Fehlercodes mit rauszugeben. Solange eine Methode False (im Sinne von "Fehler vorhanden" = false -> alles ok) zurückgibt ist alles ok, alles andere ist ein Fehler. Was für ein Fehler...das sagt dir der Errorcode -1, 1, 2, ...
Vielleicht kurz noch eine Zusatzinformation: In der Quellcodesprache-unabhängigen Bytecode-Sprache der JVM wird für das Produzieren von true als Literal die 1 (int) und zum Produzieren von false als Literal die 0 (int) verwendet. ICONST_1 für true und ICONST_0 für false. Natürlich müssen true/false Konstrukte irgendwann einmal in Maschinencode heruntergebrochen werden. Witzigerweise passiert das aber bereits im JVM Bytecode, wo es außer dem Typdescriptor "Z" (für boolean) keine weitere Unterscheidung zwischen boolean und int gibt.
Ich stimme aber @White_Fox völlig zu, dass man in solchen niedrigen Abstraktionsebenen nicht denken sollte oder irgendwelche Annahmen über die Repräsentation treffen sollte.
Vielleicht kurz noch eine Zusatzinformation: In der Quellcodesprache-unabhängigen Bytecode-Sprache der JVM wird für das Produzieren von true als Literal die 1 (int) und zum Produzieren von false als Literal die 0 (int) verwendet.
Interessant...das wußte ich auch noch nicht. Ich wußte, daß so ziemlich alles in der JVM als int behandelt wird (auch z.B. Bytes), aber auch die booleans...prima, wieder was gelernt.
Ich weiß gar nicht wie das in C ist. Der C-Standard sah ein boolean ursprünglich gar nicht vor, bis so eine Bibliothek irgendwann mal in den Standard aufgenommen wurde. Ich könnte mir aber sehr gut vorstellen, daß ein Boolean da tatsächlich in einem einzelnen Bit gespeichert wird und man somit acht booleans in einem Byte unterbringen kann. Speicherplatz war noch kostbar als diese Bibliothek geschrieben wurde - und ist es heute teilweise immer noch (wenn auch deutlich seltener).
Ich denke mal, in C wird es ein byte sein, da man weder im Hauptspeicher noch in Registern ein einzelnes Bit adressieren kann. Und ich denke mal nicht, dass der C-Compiler mehrere gemeinsam genutzte Booleans in einem byte packed und bei jedem Zugriff darauf per Bitshifting wieder unpacked. Das wäre viel zu teuer.
Es wäre als einzelnes Byte auf jeden Fall einfacher zu implementieren.
Allerdings arbeitet man in C auch sehr häufig mit Masken und daher im Endeffekt sehr wohl mit einzelnen Bits. Es ist halt wie so oft die Frage, was teurer ist: Speicherplatz oder Rechenleistung. Daher hätte ich das die Implementierung als Bit zumindest nicht abwegig gefunden. Aber genau weiß ich es auch nicht, Programmieren ist nur eine Nebenbeschäftigung.
Deswegen sagte ich auch: "Und ich denke mal nicht, dass der C-Compiler mehrere gemeinsam genutzte Booleans in einem byte packed und bei jedem Zugriff darauf per Bitshifting wieder unpacked."
Booleans als Bits in ein Byte packen würde ja nur etwas bringen, wenn du zu einem Zeitpunkt `t` im Programmfluss auch mehrere Booleans verwenden würdest, bzw. mehrere Booleans "live" wären, so dass du auch die Bits eines Bytes damit füllen könntest. Ansonsten würdest du halt ein Bit als Boolean in ein Byte packen, hättest damit aber nicht viel erreicht, weil du immer noch ein Byte als Speicherplatz benötigst. Es bleibt: Man kann einzelne Bits nicht adressieren, nur Bytes.
In Java ist die Zuweisung true=1 oder false=0 sinnlos. Löse dich von dieser Vorstellung, je schneller desto besser. Sie ist nicht hilfreich, und neigt nur dazu dich zu verwirren.
Die Zuweisung "True = 1 = Spannung ein" ist eine reine Definitionssache. Die boolsche Algebra kennt keine numerischen Ausdrücke 0 oder 1 oder andere.