Nullsetzen Bitoperatoren
-
Ich grüße Euch!
Ich hab ein kleines Problem vielleicht könnt ihr mir da weiterhelfen. Ich möchte gerne eine Funktion schreiben die ein Nullsetzten des niederwertigen Bytes durchführt. Die Funktion lautet:void zeroLSB(short sampIn[], short sampOut[], unsigned nSamp)
Habt ihr da eine Idee was man da machen könnte? Das ganz muss man mit der UND Verknüpfung machen aber wie?
-
&~0xff
-
~fricky schrieb:
&~0xff
Vorsicht - fricky ist ein Troll!
variable and -2 ist was du suchst.variable &= -2;
-
void zeroLSB(short sampIn[], short sampOut[], unsigned nSamp){ for(int i=0; i<nSamp; i++){ sampOut[i]=sampIn[i]& 0xff; } printf("%X", sampOut); }
Vielleicht so?
-
0xFF == 1111 1111 b
0xFF & 0xFF == 1111 1111 b
0xFF & 0x00 == 0000 0000 b
0xFF & ~0xFF == 0xFF & 0x00
0xFF & -2 == 0xFF & FE == 1111 1111 b & 1111 1110 b == FEshort num = 0xFFFF == 11111111 11111111 b
num = num << 8 == 11111111 00000000
-
ficky hat als erster und einziger die richtige und vernünftige lösung geschrieben, danach kam nur noch müll
-
ascda schrieb:
ficky
Böswillige Absicht oder einfach nur Übermüdung?
-
gg schrieb:
~fricky schrieb:
&~0xff
Vorsicht - fricky ist ein Troll!
war keine böse absicht, falls mein beitrag am thema vorbeiging. aber grundsätzlich hast du recht: vorsicht bei irgendwelchen antworten ist natürlich immer geboten, egal von wem sie kommen.
sHiFtoR schrieb:
num = num << 8 == 11111111 00000000
nene, damit hast du zwar unten 'ne 0, aber es wird der ganze wert verändert. ich schätze mal, dass der OP sowas nicht haben will.
-
~fricky schrieb:
&~0xff
Warum so kompliziert, ist doch das gleiche wie
& 0x00 oda net
-
warum einfach wenn umstän schrieb:
~fricky schrieb:
&~0xff
Warum so kompliziert, ist doch das gleiche wie
& 0x00 oda netnaja, wenn du nur 8-bittige variablen hast, dann schon. aber bei breiteren datentypen werden nur die unteren 8 bits 'genullt' und die oberen werden alle auf eins gesetzt. eine und-verknüpfung damit killt dann bit0...bit7 und alles oberhalb von bit7 bleibt erhalten (wegen der einsen).
-
Der Compiler macht also aus ~0xFF 0xFFFFFF00
Schummelt da also die Einsen rein, starkes Stück !
-
warum einfach wenn umstän schrieb:
Der Compiler macht also aus ~0xFF 0xFFFFFF00
Schummelt da also die Einsen rein, starkes Stück !das ist ganz normal. 0xff ist ja auch ein 'int'. wenn deine ints z.b. 4 bytes breit sind, dann ist 0xff eigentlich 0x000000ff. und ~dreht einfach alle bits um.
-
Super, danke für die Aufklärung !
-
Vielen Dank ihr seid echt super! Jetzt macht programmieren richtig spaß da man wertvolle Tipps auch von Profis bekommt und man muss sicht nicht aus Büchern herausaugen!
-
Ich hab das jetzt so programmiert:
void zeroLSB(short sampIn[], short sampOut[], unsigned nSamp){ for(int i=0; i<nSamp; i++){ printf("%X", sampOut[i] & ~0xFF); printf("\n"); printf("%X", sampIn[i] & ~0xFF); printf("\n"); } }
-
Das kannst du natürlich auch noch zusammenfassen, wenn du denn willst:
printf("%X\n%X\n", sampOut[i] & ~0xFF, sampIn[i] & ~0xFF);