8位二进制每位从左到右对应的权值分别是 128、64、32、16、8、4、2、1,即2^(n-1),n为位数。
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
---|---|---|---|---|---|---|---|
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
2^(8-1) | 2^(7-1) | 2^(6-1) | 2^(5-1) | 2^(4-1) | 2^(3-1) | 2^(2-1) | 2^(1-1) |
一个256以内的数给你化为二进制,都可以分解为权值相加,对应的权值的位值为1,其他位为0即可。
例如:192=128+64,其二进制即是:1100 0000
IP:192.168.1.108,其二进制为:1100 0000 1010 1000 0000 0001 0110 1100
192 | 168 | 1 | 108 |
---|---|---|---|
128+64 | 128+32+8 | 1 | 64+32+8+4 |
1100 0000 | 1010 1000 | 0000 0001 | 0110 1100 |
顺序拼接得到结果:
1100 0000 1010 1000 0000 0001 0110 1100 |
---|
下面是Java转换代码:
public static String ip2binary(String ip) {
return Arrays.stream(ip.split("\\."))
.map(s -> String.format("%8s", new BigInteger(s).toString(2)).replaceAll(" ", "0"))
.collect(Collectors.joining());
}