题解 | #判断两个IP是否属于同一子网 & 按位与运算符

判断两个IP是否属于同一子网

https://www.nowcoder.com/practice/34a597ee15eb4fa2b956f4c595f03218

'''
& 按位与运算符:
参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0

a=60
a1 = bin(60)[2:].zfill(8)
b=13
b1 = bin(13)[2:].zfill(8)

print(a1)
print(b1)
print(bin(a&b)[2:].zfill(8))
'''

# 先判断ip mask是否合法
def iflegal_ip(ip):

    if len(ip)!=4:
        return False
    else:
        for i in ip:
            if (
                i.isdigit()==0
                or i==''
                or int(i)>255
                or int(i)<0
                or (i[0]=='0' and len(i)>1)
            ):
                return False
                break
        else:
            return True

def iflegal_mask(mask):

    if iflegal_ip(mask)==0:
        return False
    else:
        mask_0b=''
        for i in mask:
            i_bin=bin(int(i))[2:].zfill(8)
            mask_0b += i_bin
        #print(mask_0b)
        rfind_1=mask_0b.rfind('1')
        find_0=mask_0b.find('0')
        if find_0-rfind_1==1:
            return True
        else:
            return False

def ifsame_subnet(mask,ip1,ip2):

    new_ip1=''
    new_ip2=''
    for i in range(4):
        i_bin1=bin(int(mask[i])&int(ip1[i]))[2:].zfill(8)
        i_bin2=bin(int(mask[i])&int(ip2[i]))[2:].zfill(8)
        new_ip1 += i_bin1
        new_ip2 += i_bin2
    if new_ip1==new_ip2:
        return True
    else:
        return False


while 1:
    try:
        mask=list(input().split('.'))
        ip1=list(input().split('.'))
        ip2=list(input().split('.'))
        #print(mask,iflegal_mask(mask))
        #print(ip1,iflegal_ip(ip1))
        #print(ip2,iflegal_ip(ip2))
        if (
            iflegal_mask(mask)==0 
            or iflegal_ip(ip1)==0 
            or iflegal_ip(ip2)==0
        ):
            print(1)
        else:
            if ifsame_subnet(mask,ip1,ip2):
                print(0)
            else:
                print(2)
    except:
        break


全部评论

相关推荐

沉淀一会:1.同学你面试评价不错,概率很大,请耐心等待; 2.你的排名比较靠前,不要担心,耐心等待; 3.问题不大,正在审批,不要着急签其他公司,等等我们! 4.预计9月中下旬,安心过节; 5.下周会有结果,请耐心等待下; 6.可能国庆节前后,一有结果我马上通知你; 7.预计10月中旬,再坚持一下; 8.正在走流程,就这两天了; 9.同学,结果我也不知道,你如果查到了也告诉我一声; 10.同学你出线不明朗,建议签其他公司保底! 11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
offer多多的六边形战士很无语:看了你的博客,感觉挺不错的,可以把你的访问量和粉丝数在简历里提一下,闪光点(仅个人意见)
点赞 评论 收藏
分享
11-28 17:58
门头沟学院 Java
美团 JAVA开发 n×15.5
牛客786276759号:百度现在晋升很难的 而且云这块的业务没美团好 你看百度股价都跌成啥样了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务