IP地址计算

IP地址计算:

#include <stdio.h>
#include <stdlib.h>

// bits
int count1(int v) {
        int n=0;

        while (v) {
                n+=v&0x01;
                v>>=1;
        }
        return n;
}

// power
int power(int x,int y) {
        if (y==0)
		return 1;
        else
		return x*power(x,y-1);
}

int main(void) {
        unsigned char ip[4],mask[4];
        int t1,t2,t3,t4;
        int t11,t12,t13,t14;
        int c,i;

        printf("\ninput ip address:  ");
        scanf("%d.%d.%d.%d",&t4,&t3,&t2,&t1);
        ip[3]=t4;
        ip[2]=t3;
        ip[1]=t2;
        ip[0]=t1;

        printf("\ninput net mask:  ");
        scanf("%d.%d.%d.%d",&t14,&t13,&t12,&t11);
        mask[3]=t14;
        mask[2]=t13;
        mask[1]=t12;
        mask[0]=t11;

        printf("\n");

        c=count1(t11);
        i=power(2,c)-2;

//      printf("network bits is %d.\n",c);
//      printf("network bits = 2 ^ %d = %d\n\n",c,i);

        printf("subnet bits = %d\n",c);
        printf("available max subnet = 2^%d-2 = %d\n\n",c,i);

        printf("host bits = %d\n",8-c);
        printf("available max hosts per subnet = 2^%d-2 = %d\n",8-c,power(2,8-c)-2);
    
        printf("\nnet address is:  %d.%d.%d.%d\n",ip[3]&mask[3],ip[2]&mask[2],ip[1]&mask[1],ip[0]&mask[0]);

        printf("\nnet broadcast is :  %d.%d.%d.%d\n",ip[3]|(unsigned char)~mask[3],ip[2]|(unsigned char)~mask[2],ip[1]|(unsigned char)~mask[1],ip[0]|(unsigned char)~mask[0]);

        printf("\nip addr ranges is:  %d.%d.%d.%d -- ",ip[3]&mask[3],ip[2]&mask[2],ip[1]&mask[1],(ip[0]&mask[0])+1);

        printf("%d.%d.%d.%d\n\n",ip[3]|(unsigned char)~mask[3],ip[2]|(unsigned char)~mask[2],ip[1]|(unsigned char)~mask[1],ip[0]|(unsigned char)~mask[0]-1);

        exit(0);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值