急求一道关于IP地址与子网掩码的C语言编程题(用C语言实现)
题目:任意给出一个IP地址和其掩码,请:(1)判断这个IP地址是否有效(2)判断这个掩码是否有效(3)列出此IP所在网络的全部有效IP地址(4)任意给出第二个IP地址,判...
题目:
任意给出一个IP地址和其掩码,请:
(1)判断这个IP地址是否有效
(2)判断这个掩码是否有效
(3)列出此IP所在网络的全部有效IP地址
(4)任意给出第二个IP地址,判断它是否和第一个IP地址处在同一子网中 展开
任意给出一个IP地址和其掩码,请:
(1)判断这个IP地址是否有效
(2)判断这个掩码是否有效
(3)列出此IP所在网络的全部有效IP地址
(4)任意给出第二个IP地址,判断它是否和第一个IP地址处在同一子网中 展开
展开全部
不知道您有没有学习过计算机网络。如果没有,下面简单介绍一下IP地址和掩码。
IP地址是32位的,也就是4字节。取值可以任意。
掩码也是32位的,一般建议前面的位都为1,后面的位都为0。所以本题:
(1)只要是32位的都是有效的。
(2)判断是否全1后面接全0,可用如下代码实现:
#include<stdio.h>
void main()
{
unsigned yanma,bianliang=0x80000000;
int isyanma=0,i;
printf("用十六进制输入一个32位整数\n");
scanf("%x",&yanma);
for(i=0;i<32;i++)
{
if(yanma==bianliang)
{
isyanma=1;
break;
}
bianliang=bianliang>>1;
bianliang+=0x80000000;
}
if(isyanma)
printf("%x是掩码\n",yanma);
else
printf("%x不是掩码\n",yanma);
}
(3)如果掩码的前n位为1,那么此IP所在网络全部有效IP地址是此IP地址的前n位不变,后面的位从全0到全1,比如IP地址为1.1.1.1掩码为FFFF0000,那么此IP地址所在网络的全部有效IP地址是从1.1.0.0到1.1.255.255。
(4)两个IP地址都与掩码进行二进制与,看得到的结果是否相同,如果相同则在同一子网中,否则不在同一子网中。这个用c很容易实现。
IP地址是32位的,也就是4字节。取值可以任意。
掩码也是32位的,一般建议前面的位都为1,后面的位都为0。所以本题:
(1)只要是32位的都是有效的。
(2)判断是否全1后面接全0,可用如下代码实现:
#include<stdio.h>
void main()
{
unsigned yanma,bianliang=0x80000000;
int isyanma=0,i;
printf("用十六进制输入一个32位整数\n");
scanf("%x",&yanma);
for(i=0;i<32;i++)
{
if(yanma==bianliang)
{
isyanma=1;
break;
}
bianliang=bianliang>>1;
bianliang+=0x80000000;
}
if(isyanma)
printf("%x是掩码\n",yanma);
else
printf("%x不是掩码\n",yanma);
}
(3)如果掩码的前n位为1,那么此IP所在网络全部有效IP地址是此IP地址的前n位不变,后面的位从全0到全1,比如IP地址为1.1.1.1掩码为FFFF0000,那么此IP地址所在网络的全部有效IP地址是从1.1.0.0到1.1.255.255。
(4)两个IP地址都与掩码进行二进制与,看得到的结果是否相同,如果相同则在同一子网中,否则不在同一子网中。这个用c很容易实现。
追问
能每一题都给出详细的程序吗?我们要交作业用的。
追答
在附件中。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询