Binäre logische Operatoren

Status
Nicht offen für weitere Antworten.

Reality

Top Contributor
Hi,
ich programmiere ja schon eine Weile, bin mir aber bis heute nicht sicher, was das sind.
Wo wir gerade dabei sind, würde ich gerne wissen, was << oder >>> machen. Die verschieben irgendwas um so und so viele Stellen. Nur leider sagt mir das nichts.

Liebe Grüße
Reality
 
:meld: Jeder Zahl wird im Computer als Folgen von 0 und 1 angeschaut (das hättest du jetzt nicht erwartet :bae: ).

Beispiele:
1 = 0001 = 0*8 + 0*4 + 0*2 + 1*1
5 = 0101 = 0*8 + 1*4 + 0*2 + 1*1
3 = 0011 = 0*8 + 0*4 + 1*2 + 1*1
etc...

z.B. der Operator << (left shift) verschiebt diese Bits nach links:

0001 << 2 = 0100
0101 << 1 = 1010
0011 << 3 = 1000

Oder im Dezimalsystem geschrieben.

1 << 2 = 4
5 << 1 = 10
3 << 3 = 8 // nur wenn man mal davon ausgeht, dass der Computer mit Nipples (endlich kann ich dieses Wort gebrauchen 8) ), also 4-Bitigen Zahlen rechnet.
 
Hi Beni,
danke für deine Beispiele, auch wenn ich es seltsam finde, dass du 4-bittige Beispiele nimmst.

Und mit dem |, ^ und & ?

Etwa so?
10011011 Mit |
00101101
_________
10111111

Liebe Grüße
Reality
 
4-Bitts geben halt einfach weniger zu schreiben... :wink:

| ist das oder, 1001 | 1100 = 1101
& ist das und, 1001 & 1100 = 1000
^ ist das XOR, 1001 ^ 1100 = 0101 (glaub ich jedenfalls)
~ Bitweise Negation: ~1100 = 0011
 
Versteht einer von euch etwas?
Code:
import java.applet.*;
import java.awt.*;
import java.awt.image.MemoryImageSource;

public class MemoryImageGenerator extends Applet{
  Image img;
  
  public void init(){
    Dimension d = getSize();
    int w = d.width;
    int h = d.height;
    int pixels[] = new int[w*h];
    int i = 0;
    
    for(int y = 0; y<h; y++){
      for (int x = 0; x < w; x++) {
        int r = (x^y) & 0xff;
        int g = (x*2^y*2)&0Xff;
        int b = (x*4^y*4)&0xff;
        pixels[i++] = (255 << 24) | (r << 16) | (g << 8) | b;
      }
    }
    img = createImage(new MemoryImageSource(w, h, pixels, 0, w));
  }
  
  public void paint(Graphics g){
    g.drawImage(img, 0, 0, this);
  }
}

Außerdem kommt bei mir eine Fehlermeldung:
Klasse MemoryImageSource existiert nicht

Was natürlich nicht stimmen kann.
Wo ist der Fehler?

Liebe Grüße
Reality
 
Mein Eclipse findet den Code ganz ok.

Hm, lösch mal alte *.class-Dateien, und kompilier den Code nocheinmal.
 
Hab sogar ein neues Projekt erstellt und es geht nicht! :x
Mit Gel ging es ebenfalls nicht.

Was kommt da als Ergebnis, wenn ich fragen darf?

EDIT: Das kommt bei Gel:

java.lang.IllegalArgumentException
at sun.net.www.ParseUtil.decode(ParseUtil.java:155)
at sun.net.www.protocol.file.Handler.openConnection(Handler.java:59)
at java.net.URL.openConnection(URL.java:896)
at sun.applet.AppletClassLoader.getBytes(AppletClassLoader.java:260)
at sun.applet.AppletClassLoader.access$100(AppletClassLoader.java:43)
at sun.applet.AppletClassLoader$1.run(AppletClassLoader.java:152)
at java.security.AccessController.doPrivileged(Native Method)
at sun.applet.AppletClassLoader.findClass(AppletClassLoader.java:149)
at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
at sun.applet.AppletClassLoader.loadClass(AppletClassLoader.java:123)
at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
at sun.applet.AppletClassLoader.loadCode(AppletClassLoader.java:561)
at sun.applet.AppletPanel.createApplet(AppletPanel.java:617)
at sun.applet.AppletPanel.runLoader(AppletPanel.java:546)
at sun.applet.AppletPanel.run(AppletPanel.java:298)
at java.lang.Thread.run(Thread.java:534)

Finished executing

Liebe Grüße
Reality
 
Ein Screenshot ist schöner :bae:

forum_030.png


P.S. habs mit 1.5 laufen lassen.
 
Hmm, wie man auf solche Algorithmen kommt.
Würde mir schon reichen, wenn ich ihn verstehe.

Achja, danke übrigens! 🙂 Bist ein netter Kerl. 😉

Liebe Grüße
Reality
 
Ein Integer ist 32 Bits, und nicht 8 Bits lang. Dann setzt &0xFF die ersten 24 Bits auf 0.
 
0xFF ist einfach nur eine hexadezimale zahl: FF udn das is im dezimalsystem 255, und das passt gerade noch in ein byte rein
 
nö, ein byte kann 256 verschiedene zustände haben.
normalerweise von 0-255
oder: ein byte mit vorzeichen von -128 zu 127
aber dann muss man extra bytes setzen oder mitschicken oder so...
 
Seltsam, konnte ich nirgendswo finden (das mit den 0-255). Aber konnte nachlesen, dass es 8 Bit hat.

Liebe Grüße
Reality
 
Reality hat gesagt.:
Beni hat gesagt.:
Ein Integer ist 32 Bits, und nicht 8 Bits lang. Dann setzt &0xFF die ersten 24 Bits auf 0.
Woran erkennst du, dass 0xFF nur 8 Bits lang ist?

Liebe Grüße
Reality

Muss es gar nicht, es geht nur darum dass die letzen 8 Bits = 1 sind, und alle anderen = 0 (weil x & 0 immer 0 ergibt).
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben