这是2020年3月25日华为笔试第一题

问题描述

输入两个IP地址和合法的子网掩码,如
192.168.1.1 192.168.1.2 255.255.255.0
输出结果1表示IP1,IP2在同一子网,并输出IP1的网络号
1 192.168.1.0
192.168.21.156 192.168.45.148 255.255.255.128
0表示IP1,IP2不在同一子网并输出IP1的网络号
0 192.168.21.128
判断IP和IP2是否为同一个子网我的思路是
1、将三部分地址按空格截取(string.spilt(" “));
2、将每个地址按(”\.")截取;
3、将每部分转换为二进制连接成完整的IP地址二进制字符串。另外 两个也执行同样的操作;
4、将子网掩码的1的部分统计数量
5、根据子网掩码的结构截取IP1、IP2的有效部分,并判断是否相同,从而判断IP和IP2是否在同一个字段
输出IP1的网络号我的思路是:
1、将刚才截取的IP1的部分补全为32位;
2、将1中补全的字符串按每八位截取;
3、按将每部分取字符(1或0)根据位置变为十进制,并累加为256进制的标准IP;
4、将四部分用点字符串连接输出;

代码缺陷

该程序输入必须为IP1 IP2 子网掩码
输入的子网掩码应该是和IP1相匹配

@wahaha13168

https://blog.csdn.net/wahaha13168/article/details/83008252?utm_source=blogxgwz8

代码

import java.io.IOException;public class Zyy{public static void main(String[] args) throws IOException {byte [] a = new byte[200];   //用来保存键盘的输入String [] bin = new String[100]; //保存IP地址转成的二进制字符串int len = System.in.read(a);  //键盘键入的字符的长度String string = new String(a,0,len -2); //将键盘键入的字符转化为字符串,并把换行和光标移到行首的两个字符去掉String [] ch = string.split(" ");//按空格截取,将IP1,iP2 和子网掩码nm 分别截取到ch数组String [] ip1 = ch[0].split("\\.");//按'.'截取,通过\转义\,在通过\转义'.',将IP1的每个部分截取保存到IP1的数组中String [] ip2 = ch[1].split("\\.");//同上String [] nm  = ch[2].split("\\.");    //同上
//      System.out.println(ip1[0]);
//      System.out.println(ip1[1]);
//      System.out.println(ip1[2]);
//      System.out.println(ip1[3]); //将IP1的地址转换为二进制 for (int i = 0; i < ip1.length; i++) { int temp = Integer.parseInt(ip1[i]);//将字符串转换为int型数据if(bin[0] == null) {      //字符串为空bin[0] =toBinary(temp , 8);  //将转换的二进制字符串直赋值给bin[0];toBinary将int数据转换为二进制的函数} else {bin[0] = bin[0] + toBinary(temp , 8);//不为空,将字符串连接}}//将iP2的地址转为二进制字符串for (int i = 0; i < ip1.length; i++) {int temp = Integer.parseInt(ip2[i]);if(bin[1] == null) {bin[1] =toBinary(temp , 8);} else {bin[1] = bin[1] + toBinary(temp , 8);}}   //将子网掩码转换为二进制for (int i = 0; i < ip1.length; i++) {int temp = Integer.parseInt(nm[i]);if(bin[2] == null) {bin[2] =toBinary(temp , 8);} else {bin[2] = bin[2] + toBinary(temp , 8);}}    //      System.out.println(bin[0]);
//      System.out.println(bin[1]);
//      System.out.println(bin[2]);//判断子网掩码的结构,即什么时候有1变0,统计个数      int count = 0;for(int i =0 ;i <bin[2].length();i++) {char ch1 = bin[2].charAt(i);if(ch1 == '1') {count++;} else {break ;}}//将IP1的IP2按照子网掩码的结构截取String yip1 = bin[0].substring(0, count);
//      System.out.println(yip1);String yip2 = bin[1].substring(0, count);
//      System.out.println(yip2);int result = 0;    //定义两个IP是否在同一子网的标志位if(yip1.equals(yip2)) {  //字符串比较,若相同在同一子网result = 1;              //将标志位置为1      } System.out.println(result);  //输出结果//2、输出子网1的网络号while(yip1.length() != 32) { //将刚才截取的IP1补全为32地址yip1 = yip1 + "0";}String [] yipa = new String[4]; //保存截取的IP1的网络号的每个部分yipa[0] = yip1.substring(0,8);//按八位截取为四部分yipa[1] = yip1.substring(8,16);
//      System.out.println(yipa[1]);yipa[2] = yip1.substring(16,24);
//      System.out.println(yipa[2]);yipa[3] = yip1.substring(24,32);
//      System.out.println(yipa[3]);int ipz[] = new int [4];  //申请int数组保存二进制转为的256进制数for (int i = 0; i < 4; i++) {for (int j = 0; j < 8; j++) {char q = yipa[i].charAt(j);//按位取字符
//              System.out.println(q);if(q == '1') {  //若为1,则根据转换规则将所有位的结果相加就是最终的网络号的值ipz[i] = (int) (ipz[i] + 1 * Math.pow(2, (7-j)));
//              System.out.println(ipz[i]);} }}
//      System.out.println(ipz[0]);
//      System.out.println(ipz[1]);
//      System.out.println(ipz[2]);
//      System.out.println(ipz[3]);System.out.println(ipz[0]+"."+ipz[1]+"."+ipz[2]+"."+ipz[3]);//将每个位置的数据和‘.’连接起来就得到了IP1的网络号}/*** 将一个int数字转换为二进制的字符串形式。* @param num 需要转换的int类型数据* @param digits 要转换的二进制位数,位数不足则在前面补0* @return 二进制的字符串形式* /https://blog.csdn.net/wahaha13168/article/details/83008252?utm_source=blogxgwz8*/public static String toBinary(int num, int digits) {int value = 1 << digits | num;String bs = Integer.toBinaryString(value); //0x20 | 这个是为了保证这个string长度是6位数return  bs.substring(1);}
}

结果展示

1、IP1和IP2在同一子网


2、IP1和IP2不在同一子网

华为笔试题:根据子网掩码判断两个IP地址是否在同一子网,并输出IP1的网络号相关推荐

  1. 一个路由器两个网段互通_如何判断两个IP地址是否在同一个网段?什么是子网掩码?...

    前几天咱们了解:三种方法告诉你项目超过255个摄像机怎么设置IP?什么是公网ip?什么又是内网ip?为什么ip地址通常以192.168开头? 也学习了:二.三层交换机与路由器的区别! 但是有好多人对I ...

  2. 如何判断两个IP地址是不是处于同一网段?

    个人理解,欢迎指正. 一.要判断两个IP地址是不是在同一个网段,就将它们的IP地址分别与子网掩码做与运算,得到的结果-->网络号,如果网络号相同, 就在同一子网,否则,不在同一子网. 例:假定选 ...

  3. 怎样判断两个ip地址是不是在同一个网段中?

    我们先来了解一下,判断两个ip地址是不是在同一个网段的方法. 要想判断两个ip地址是不是在同一个网段,只需将ip地址与子网掩码做与运算,如果得出的结果一样,则这两个ip地址是同一个子网当中. 例子: ...

  4. 如何判断两个IP地址是不是同一个网段(超实用)

    IP地址 IP地址被用来给Internet上的电脑一个编号.大家日常见到的情况是每台联网的PC上都需要有IP地址,才能正常通信.我们可以把"个人电脑"比作"一台电话&qu ...

  5. 教你如何判断两个IP地址,是否在同一个网段

    目录 前言 一.什么是子网掩码? 二.如何根据掩码来确定ip地址网段 总结 前言 子网掩码的介绍以及如何根据掩码来确定IP地址网段. 一.什么是子网掩码? 子网掩码只有一个作用,就是将某个IP地址划分 ...

  6. qprocess start怎么判断是否结束_怎么样判断两个IP地址是否在同一个网段

    怎么样判断两个IP地址是否在同一个网段 方法 通过自身的IP与自身掩码算出网络地址X 通过目的IP与自身掩码算出目的地的网络地址Y 如果这两个网络一样(X=Y),则表示目的地与自身在一个网络内 如果两 ...

  7. 判断两个IP地址(ipv4)是否在同一个网段

    我们通常会遇到的ip地址是这样的: ip地址:192.168.227.205 子网掩码:255.255.255.0 ip地址:192.168.226.202 子网掩码:255.255.255.0 19 ...

  8. 如何判断两个ip地址是否在同一个网段

    ip地址分为A.B.C.D.E五大类,其中D和E不对民用组织开放,所以我们只能使用ABC三类,判断ip是否在同一个网段,首先得判断ip地址属于哪一类. 网络类别 最大网络数 IP地址范围 最大主机数 ...

  9. 金证部分笔试题--前中后序、IP地址分类、三次握手、BIO,NIO,AIO等

    1.已知二叉树后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是? 解题需要知道的知识点:前序中序和后序 (1)先看下面简单的二叉树 A:根节点,B:左子节点,C:右子节点 前序: ...

  10. 如何判断两个ip是否属于同一子网;如何确定子网掩码,让300台服务器处于同一网段

    一.什么是子网掩码? 在了解ip地址的网段之前,我们先来了解子网掩码,很多对网络了解不深的朋友都对子网掩码有些迷惑, 不了解它是用来干什么的? 子网掩码不能单独存在,它必须结合IP地址一起使用.子网掩 ...

最新文章

  1. HTML5基础01-网页的构造块
  2. nn.Conv2d中padding详解【pytorch学习】
  3. ARVR编辑器V1.2.4曝光,原来好作品都是在这诞生的!
  4. Educational Codeforces Round 81 (Rated for Div. 2) B. Infinite Prefixes 数学
  5. ASP.NET多线程编程(一) 收藏
  6. ORA-00257 archiver error. 错误的处理方法
  7. 破解vysor为专业版
  8. 偏微分方程数值解的matlab程序,偏微分方程数值解法MATLAB源码
  9. Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
  10. 免费的安全删除软件 SDelete v1.51
  11. 张正友标定算法原理详解
  12. 《那些年啊,那些事——一个程序员的奋斗史》——77
  13. 年审是当月还是当天_车辆年审到期是指当月吗?
  14. 【Pytorch】解决使用BucketIterator.splits警告volatile was removed and now has no effect. Use `with torch.no_g
  15. 格兰杰因果( Granger causality test)在神经科学中脑区功能连接上的应用
  16. android pppd流程,Android pppd_gprs脚本启动过程
  17. MLY -- 8.Establish a single-number evaluation metric for your team to optimize
  18. python实现扫码支付_python支付宝页面扫码支付
  19. OCR/STR生僻字数据训练 | PaddleOCR的Fine-tune常见问题汇总(3)
  20. UI 真正的含义是什么?

热门文章

  1. 小米无线路由器经常连接不上网络连接服务器,小米路由器频繁掉线详细解决方法...
  2. CenterOs操作
  3. 马哥python开发培训
  4. js设置cookie,包含多个name
  5. matlab机器人模型仿真,一知半解|MATLAB机器人建模与仿真控制(1)
  6. centos----tftpd配置
  7. 解决idea导入项目中文乱码intellij
  8. 朋友圈加粗字体数字_如何让你的朋友圈骚到脱颖而出?
  9. MySQL 调优工具
  10. 小米路由器 R1D 可用 java JRE openjdk