题解 | #判断两个IP是否属于同一子网#
判断两个IP是否属于同一子网
http://www.nowcoder.com/practice/34a597ee15eb4fa2b956f4c595f03218
核心内容
- 将ip逐点转为8位
- 将转换之后的ip 转为整数,如果显示为负数,二进制取反后parseInt(ip,2)
- 注意ip与mask的判定,mask的二进制中只要包含(01)就是不合法的
let lines = [];
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
rl.on("line", function (line) {
lines.push(line);
if (lines.length == 3) {
let mask = ip2bin(lines[0]);
let ip1 = ip2bin(lines[1]);
let ip2 = ip2bin(lines[2]);
if (mask && ip1 && ip2) {
// let a = "0b1000001110000101100101000001111"
// let b = "0b11101000001010110000011100111011"
// console.log(a&b)
if (mask.includes("01")) {
console.log("1");
} else {
if (
~(parseInt(ip1, 2) & parseInt(mask, 2)) ==
~(parseInt(ip2, 2) & parseInt(mask, 2))
) {
console.log("0");
} else {
console.log("2");
}
}
}
lines = [];
}
});
function ip2bin(ip) {
// 分割
let ipArr = ip.split(".");
let ipOut = "";
for (let value of ipArr) {
if (+value > 255 || +value < 0) {
console.log("1");
return false;
}
let dec = parseInt(value);
let bin = dec.toString(2).padStart(8, 0);
ipOut = ipOut + bin;
}
return ipOut;
}