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 == FE 👎

    short 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 net

    naja, 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);
    

Log in to reply