看程序時,碰到一個問題,解決之餘想起練習打印正整數的二進制。
//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");
}