ビット演算なのですがビットを全てゼロにする処理を考えていたのですが<<20などをしてビットを
あふれ消す?みたいなことができたんですけどこれは正しい処理の書き方なのでしょうか?
1ビットずつ1になってるビットを消す処理が正しい処理なのですか?

#include <stdio.h>

typedef unsigned char uchar;

void print_bit(unsigned char idx)
{
    unsigned char bit = 1 << 7;
    int i = 0;
    while (bit != 0)
    {
        if (idx & bit)
        {
            printf("1");
        }
        else
        {
            printf("0");
        }

        i++;
        bit >>= 1;
        if (i == 4) {
            printf("_");
        }
    }
    printf("\n");
}

//左に何回シフトするか
unsigned char flag_bit(unsigned char idx,unsigned char p)
{
    unsigned char bit =  1 << 7;
    //unsigned char id = idx;
    if (p == 0)
    {
        p = 1;
    }
    p = 7 - p;

    idx <<= p;
    idx = idx  | bit;
    idx >>= p;


    return idx;

}

int main()
{
    unsigned char x = 0;
    uchar t = 0;
    uchar bit = 1 << 7;
    t = flag_bit(t,2);
    t = flag_bit(t,4);
    print_bit(t);

    t <<= 20;
    print_bit(t);


    getchar();
}