1. 程式人生 > >5-23 IP地址轉換 (20分) (位操作)

5-23 IP地址轉換 (20分) (位操作)

5-23 IP地址轉換   (20分)

一個IP地址是用四個位元組(每個位元組8個位)的二進位制碼組成。請將32位二進位制碼錶示的IP地址轉換為十進位制格式表示的IP地址輸出。

輸入格式:

輸入在一行中給出32位二進位制字串。

輸出格式:

在一行中輸出十進位制格式的IP地址,其由4個十進位制陣列成(分別對應4個8位的二進位制數),中間用“.”分隔開。

輸入樣例:

11001100100101000001010101110010

輸出樣例:

204.148.21.114
//老師的辦法,巧妙;自己的,繁瑣
//學語言要活學活用,充分利用語言特性,簡化程式碼;就像此處的C語言位運算;
自己:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>"

int main()
{
   char ch[33];
   int num[4];
   gets(ch);
   int i,j=0;
   int number=0;
   for(i=31;i>=24;i--){
       number+=(ch[i]-'0')*(int)pow(2,j);
       j++;
   }
   num[3]=number;
   j=0,number=0;
   for(i=15;i>=8;i--){
       number+=(ch[i]-'0')*(int)pow(2,j);
       j++;

   }

   num[1]=number;


   j=0,number=0;
   for(i=23;i>=16;i--){
       number+=(ch[i]-'0')*(int)pow(2,j);
       j++;

   }
   num[2]=number;
   j=0,number=0;
   for(i=15;i>=8;i--){
       number+=(ch[i]-'0')*(int)pow(2,j);
       j++;

   }
   num[1]=number;
   j=0,number=0;
   for(i=7;i>=0;i--){
       number+=(ch[i]-'0')*(int)pow(2,j);
       j++;

   }
   num[0]=number;
   printf("%d.%d.%d.%d\n",num[0],num[1],num[2],num[3]);


   return 0;
}

老師:
void tran(){
    int num=0;
    for(int i=0; i<8; i++){
        num = num << 1;
        num = num | (getchar()-'0');//注重二進位制及其運算的巧妙運用

    }
    printf("%d",num);
}
int main(){
    tran();
    putchar('.');
    tran();
    putchar('.');
    tran();
    putchar('.');
    tran();

    return 0;
}