Hallo,
ich habe mich heute mal etwas genauer mit den Bitoperatoren beschäftigt und bin nicht ganz sicher, ob ich das alles richtig verstanden habe:
(a | b) vs. (a || b)
| = inclusive or = mindestens einer der Ausdrücke muss richtig sein.
Bei | werden sämtliche Ausdrücke durchgegangen, bei || wird abgebrochen, sobald ein korrekter Ausdruck gefunden wurde.
Analog (a & b vs. a && b).
&& und || werden bei Stackoverflow als "short-circuits" bezeichnet.
Aber ich tu mich noch schwer damit zu verstehen, wie z.B. hier:
derselbe Operator einmal eine Zahl und einmal einen boolean zurückgeben kann. Ich weiß prinzipiell, wie ich zwei Bytes über 'oder' oder 'und' verknüpfe, aber hier tu ich mich schwer.
Meine Erklärung dafür wäre:
In beiden Fällen werden die Parameter in bits zerlegt und verknüpft. Beim ersten erkennt der Compiler, dass ich eine Zahl haben möchte und wandelt es entsprechend um. Beim zweiten merkt er, dass ich jetzt einen boolean bräuchte und wandelt es auch hier von selbst um.
Aber diese Erklärung klingt für mich irgendwie n bisschen krude :-/
Bitshift verschiebt "einfach nur" alles um die angegebene Anzahl von Bits nach links oder rechts. Google meint dazu, dass so zu rechnen schneller wäre, als eine normale Division oder Multiplikation.
Stimmt das noch? Oder sind heute die Rechner so schnell, dass es im Normalfall keine signifikanten Auswirkungen hat?
ich habe mich heute mal etwas genauer mit den Bitoperatoren beschäftigt und bin nicht ganz sicher, ob ich das alles richtig verstanden habe:
(a | b) vs. (a || b)
| = inclusive or = mindestens einer der Ausdrücke muss richtig sein.
Bei | werden sämtliche Ausdrücke durchgegangen, bei || wird abgebrochen, sobald ein korrekter Ausdruck gefunden wurde.
Analog (a & b vs. a && b).
&& und || werden bei Stackoverflow als "short-circuits" bezeichnet.
Aber ich tu mich noch schwer damit zu verstehen, wie z.B. hier:
Java:
int a = 1 | 2;
boolean b = false | true;
Meine Erklärung dafür wäre:
In beiden Fällen werden die Parameter in bits zerlegt und verknüpft. Beim ersten erkennt der Compiler, dass ich eine Zahl haben möchte und wandelt es entsprechend um. Beim zweiten merkt er, dass ich jetzt einen boolean bräuchte und wandelt es auch hier von selbst um.
Aber diese Erklärung klingt für mich irgendwie n bisschen krude :-/
Bitshift verschiebt "einfach nur" alles um die angegebene Anzahl von Bits nach links oder rechts. Google meint dazu, dass so zu rechnen schneller wäre, als eine normale Division oder Multiplikation.
Stimmt das noch? Oder sind heute die Rechner so schnell, dass es im Normalfall keine signifikanten Auswirkungen hat?