bitshift : decimal -> binary / 10進2進変換

ビットを扱うのって、苦手な人が多い気がする.自分ふくめ。
目に見えないからわかりにくいんだよね、たぶん。しかし、ビット演算は、つかえると非常に便利だとおもう。まだ便利に使えるほどつかえないけど。

#include <stdio.h>

void dec2bin(const int decimal_orig, char *binary, const size_t strsize)
{
    int s = 0, decimal, b_size = 0;
    char tmp[strsize];
    decimal = decimal_orig;

    while (s < strsize - 1) {
        tmp[s++] = (decimal & 1) ? '1' : '0';
        decimal = decimal >> 1;
    }

    while (s-- > 0) {
        if (tmp[s] == '0'&& b_size == 0) {
            continue;
        }   
        binary[b_size++] = tmp[s];
    }   

    if (b_size == 0) {
        binary[b_size++] = '0';
    }   

    binary[b_size] = '\0';
}

int main()
{
    int i = -31, count = 1;
    char b[33], c[33], tmp[33];

    for (; i < 33; i++) {
        dec2bin(i, b, 33);
        printf("%10d = %33s\n", i, b); 
    }   

    return 0;
}
       -31 =  11111111111111111111111111100001
       -30 =  11111111111111111111111111100010
       -29 =  11111111111111111111111111100011
       -28 =  11111111111111111111111111100100
       -27 =  11111111111111111111111111100101
       -26 =  11111111111111111111111111100110
       -25 =  11111111111111111111111111100111
       -24 =  11111111111111111111111111101000
       -23 =  11111111111111111111111111101001
       -22 =  11111111111111111111111111101010
       -21 =  11111111111111111111111111101011
       -20 =  11111111111111111111111111101100
       -19 =  11111111111111111111111111101101
       -18 =  11111111111111111111111111101110
       -17 =  11111111111111111111111111101111
       -16 =  11111111111111111111111111110000
       -15 =  11111111111111111111111111110001
       -14 =  11111111111111111111111111110010
       -13 =  11111111111111111111111111110011
       -12 =  11111111111111111111111111110100
       -11 =  11111111111111111111111111110101
       -10 =  11111111111111111111111111110110
        -9 =  11111111111111111111111111110111
        -8 =  11111111111111111111111111111000
        -7 =  11111111111111111111111111111001
        -6 =  11111111111111111111111111111010
        -5 =  11111111111111111111111111111011
        -4 =  11111111111111111111111111111100
        -3 =  11111111111111111111111111111101
        -2 =  11111111111111111111111111111110
        -1 =  11111111111111111111111111111111
         0 =                                 0
         1 =                                 1
         2 =                                10
         3 =                                11
         4 =                               100
         5 =                               101
         6 =                               110
         7 =                               111
         8 =                              1000
         9 =                              1001
        10 =                              1010
        11 =                              1011
        12 =                              1100
        13 =                              1101
        14 =                              1110
        15 =                              1111
        16 =                             10000
        17 =                             10001
        18 =                             10010
        19 =                             10011
        20 =                             10100
        21 =                             10101
        22 =                             10110
        23 =                             10111
        24 =                             11000
        25 =                             11001
        26 =                             11010
        27 =                             11011
        28 =                             11100
        29 =                             11101
        30 =                             11110
        31 =                             11111
        32 =                            100000