Per quanto riguarda l'or č corretto...
Un and con 255 ( 1111 1111 ) lascia invariato il numero...
Casomai devi fare un and ~(1<<(nbib-1))
codice:
#include <stdio.h>

void printBit(unsigned char c) {
    int i;
    for(i = 7; i >= 0; --i) {
        printf("%d", (c>>i) & 1);
    }
    printf("\n");
}

int main(void) {
    const int nbit1 = 3;
    const int nbit2 = 7;
    unsigned char c = 0;
    printBit(c);
    c |= (1u<<(nbit1-1));
    c |= (1u<<(nbit2-1));
    printBit(c);
    c &= ~(1u<<(nbit1-1));
    printBit(c);
    return 0;
}