【二进制】(你想知道的移位操作)

2019-03-11  本文已影响1人  宏伟de890926
0 、1 构建世界

问:Ipv4地址可以转为整数类型的数字?

思路:ip地址分为四段,每段都是 0~255 之间的数,每段可以用 8 位来装下它,即4x8=32

ip字符串转int:

   {
        String ip = "192.16.1.102";
        String[] ips = ip.split("\\.");
        int res = 0;//最初值00000000 00000000 00000000 00000000
        //0~255  4*8=32 11111111 11111111 11111111 11111111
        for (int i = 0; i < ips.length; i++)
        {
            int temp = Integer.parseInt(ips[i]) << 8 * i;
            //temp 192->1100 0000  4096->10000 0000 0000
            res = res | temp;
            //结果保留1--1100110000000010001000011000000
        }
    }

以255.255.255.255这个地址为例,或运算过程如下:
1、0 | 1111 1111 --255<<0
2、1111 1111 | 1111111100000000 --255<<8
3、11111111 11111111 | 111111110000000000000000 --255<<16
补0的过程如上,值前补0再做或运算

255.255.255.255

int位转换为ip字符串:

    //int 位转换为 ip 字符串
        String[] ips = new String[4];
        int ip = stringToIp();
        for (int i = 0; i < 4; i++) {
            int temp = 255 << (8 * i);
            int and = ip & temp;
            ips[i] = String.valueOf(and >>> 8 * i);
        }
        System.out.println(String.join(".", ips));

ip - 1100110000000010001000011000000
1、ip & 1111 1111 --11000000
2、ip & 11111111 00000000 --0001000000000000

涉及知识点

数据 字节 标题3
int 4位字节 1字节=8比特 4*8=32比特
---------------------- ------------- -----------------

我们来理解下十进制到二进制的转换

十进制 二进制 十进制 二进制
0 0 9 1001
1 1 10 1010
2 10 11 1011
3 11 12 1100
4 100 13 1101
5 101 14 1110
6 110 15 1111
7 111 16 10000
8 1000 17 10001

位与( & )
运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1;
与0相与可清零
与1相与可保留原值

取一个数中指定位,如取A的低4位
e.g.
A=10101110
A & 0000 1111 = 0000 1110

位或( | )
运算规则:0|0=0; 0|1=1; 1|0=1; 1|1=1;
与0相或可保留原值
与1相与可齐设1

异或( ^ )

左移操作(<<)

上一篇 下一篇

猜你喜欢

热点阅读