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.
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 …
[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.
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 |
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
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!
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!
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.