練習-打印正整數的二進制

看程序時,碰到一個問題,解決之餘想起練習打印正整數的二進制。

 

 

//Convert an integer (>0) to a binary and print.

void prn(char *p){
    while(*p=='0') p++;

    while(*p != '/0'){
        printf("%c ",*p);
        ++p;
    }
    printf("/n");
}
//一個整數等於若干個2的冪的整數相加
void f1(int aInt){
    int i=30;
    char bit[33];
    int num=0;

    memset(bit,'0',sizeof(bit)/sizeof(char));

    while(aInt>0 && i>=0){
        num = pow(2,i);
        //printf("%d/n",num);
        if(num <= aInt){
            bit[32-i-1] = '1';
            aInt -= num;
        }
        i--;
    }

    bit[32] = '/0';

    prn(bit);
}

//通過移位,判斷每一位是不是零
void f2(int aInt){
    char bit[33];
    int i=31;
    memset(bit,'0',sizeof(bit)/sizeof(char));

    while(aInt>0 && i>=0){
        if(aInt&1 == 1){
            bit[i] = '1';
        }
        aInt = aInt>>1;
        i--;
    }

    bit[32] = 0;
    prn(bit);
}

//常規的計算方法
void f3(int aInt){
    char bit[33];
    int i=31;
    memset(bit,'0',sizeof(bit)/sizeof(char));
    bit[32] = 0;

    while(aInt>0 && i>=0){
        if(aInt%2 == 1){
            bit[i] =  '1';
        }
        aInt = aInt/2;
        i--;
    }

    prn(bit);
}

//
void prnBit(char c){
    switch(c){
        case '1': printf("1 ");
          break;
        case '2': printf("1 0 ");
          break;
        case '3': printf("1 1 ");
          break;
        case '4': printf("1 0 0 ");
          break;
        case '5': printf("1 0 1 ");
          break;
        case '6': printf("1 1 0 ");
          break;
        case '7': printf("1 1 1 ");
          break;
        case '8': printf("1 0 0 0 ");
          break;
        case '9': printf("1 0 0 1 ");
          break;
        case 'a': printf("1 0 1 0 ");
          break;
        case 'b': printf("1 0 1 1 ");
          break;
        case 'c': printf("1 1 0 0 ");
          break;
        case 'd': printf("1 1 0 1 ");
          break;
        case 'e': printf("1 1 1 0 ");
          break;
        case 'f': printf("1 1 1 1 ");
          break;
        default: break;
   }

}

//convert to hex, then print.
void f4(int aInt){
    char bit[33];
    int i=0;
    memset(bit,0,sizeof(bit)/sizeof(char));

    sprintf(bit,"%x",aInt);

    i=0;
    while(bit[i] != 0){
        prnBit(bit[i]);
        i++;
    }
    printf("/n");
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章