Byte/Bits von int auf 0 setzen

Hi-Ho,

wie kann ich am performantesten eine bit-range (genau ein byte) in einem Integer auf 0 setzen? Also wenn beim int

11001010
00111110
10010101
01101110

Das 2. Byte auf 0 setzen wollen würde, dann sollte aus dem oben genannten int dieser hier werden:

11001010
00000000
10010101
01101110

Sinn und zweck davon ist, dass ich den RGB-Wert eines Images auslese. Dort kralle ich mir dann eine vorher definierte Farbe (z. B. Grün, 2. Byte), manipuliere diese, und möchte Sie jetzt dann wieder in den RGB-Wert zurückschreiben.

Danke!

naja ich würd einfach eine Und-Verknüpfung machen
also wert = wert | 0xF0FF;

Ja, habs jetzt auch mit ner Enumeration gemacht (bietet sich in meinem Fall sowieso an), die den zugehörigen int-Wert für eine Und-Verknüpfung pro Element speichert.

Mich würde trotzdem interessieren, ob man das irgendwie effektiv errechnen kann …

Achso, naja vielleicht wäre nen Switch noch möglich. Wobei das von der Menge deiner Möglichkeiten abhängt

ja, das ist ja alles soweit klar. Aber switch berechnet ja auch wieder nix, sondern switched eben :smiley: .

Aber meine Frage ist ja eigentlich schon gelöst. Alles andere ist nice-to-have-Zusatzwissen :stuck_out_tongue_winking_eye:

[QUOTE=EagleEye]naja ich würd einfach eine Und-Verknüpfung machen
also wert = wert | 0xF0FF;[/QUOTE]

Nur aus Interesse: Wieso nicht “&”?
Ich hätte spontan an sowas gedacht:
wert &= ~(0x000F << (8*n)) //Korrigiert, zuerst stand statt "~" noch "^"
PS: Ich hatte schon mal das Gefühl, das Bitverschiebungen nicht unbedingt langsamer sind als gebufferte Werte.

Danke

Mit & kannst du Werte prüfen
00001100
&00000100


00000100

Bitverschiebung sind immer langsamer als feste werte, weil da was gemacht wird, aber Bitoperationen selbst sind extrem schnell.

Danke für die schnelle Antwort

Zeigt dein Beispiel aber eigentlich nicht genau das was gefragt war: Die Bits „0“ setzen die im vordefinierten int „0“ sind?
Deine Undoperation mit „|“ (Oder?) irritiert mich irgendwie.

War dann wohl ein Missverständnis mit meinem Profiler:mad:

Und-Operationen werden mit & gemacht, oder mit | :wink:
Nein mit Und fragste nur ab, du prüfst auf eine Maske und wenn das Ergebnis genauso wie die Maske ist sind die Bits gesetzt.
Bei Oder setzt du die Bits die du brauchst und die anderen werden nicht angetastet
01001100
|00100100


01101100

Naja aber mit folgendem bekomme ich das Ergebnis “ab00eabc”:

    public static void main(String[] args) {
        int i=0xABCDEABC;
        i &= ~(0x000000FF << 8*2);
        System.out.println(Integer.toHexString(i));
    }
}```
während mir "i = i | 0xF0FF;" einen "abcdfaff" abliefert.

Ich glaube es gibt irgendwo ein Missverständnis :confused:. Ist ja nicht tragisch, ich muss es ja nicht verstehen :), Hauptsache jeder hat was er braucht...

Trotzdem Danke!

Naja doch die Bitoperationen sollte man eigentlich verstehen, nimm dir dafür aber mal lieber ein kleineres Beispiel und mische nicht alle so sehr :wink:

Das Problem ist, dass ich immer noch glaube, dass gerade bei mir das 'rauskommt was rauskommen soll und immer das rauskommt was ich für logisch halte. Insofern ist mein Problem wohl nur das Verständnis der Erklärungen und der Ausgangsfrage.
Also werd ich mich bei nächster Gelegenheit vielleicht statt Java erst mal der Frage zuwenden, was eine “Maske” sein soll ;).

Das hat bei mir Zeit :eek:, bin ja schließlich kein Programmierer…
Müh dich nicht unnötig mit mir ab!

hier ich kann dir die Folien von nem Dozenten den ich hatte empfehlen http://mwilhelm.hs-harz.de/vorlesungen/sem1/gdi1/index.html der hat das alles eigentlich ganz gut erklärt

Danke, sehr guter Link nicht nur für professionelle Programmierer.
Trotzdem: das Ergebnis meines Programms “ab00eabc” entspricht doch genau dem, was der Fragesteller ursprünglich wollte, oder? Mit dem, von dir vorgeschlagenen, “|” bringe ich mein Java dagegen einfach nicht zum gewünschten Ergebnis.

Ups stimmt, wo ich jetzt genauer drüber nachdenke :smiley: das Oder ist falsch da muss das Und rein weil er ja löschen will.

Dann bin ich beruhigt.
Du hattest irgendwie ursprünglich ja auch “und” geschrieben.

Danke, danke! Aber jetzt brauch ichs auch nicht mehr :stuck_out_tongue: . Evtl. irgendwann später, aber ich hab momentan einfach zu viel um die Ohren …

[QUOTE=Null]
Aber meine Frage ist ja eigentlich schon gelöst.[/QUOTE]
Wat?

war die perfekte Antwort. Meine Operatorenklauberei war dann „nice-to-have“.
Oder so