美文网首页
【二进制】(你想知道的移位操作)

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

作者: 宏伟de890926 | 来源:发表于2019-03-11 23:57 被阅读1次
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

异或( ^ )

左移操作(<<)

相关文章

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

    问:Ipv4地址可以转为整数类型的数字? 思路:ip地址分为四段,每段都是 0~255 之间的数,每段可以用 8 ...

  • java二进制表示形式与移位操作符

    1.java二进制表示形式 2.移位操作符1.左移位操作符(<<)2.“有符号”右移位操作符(>>)3.“无符号”...

  • Java的位运算符详解实例

    1.与(&)、或(|)、非(~)、异或(^) 2.移位运算符 移位运算符操作的对象就是二进制的位,可以单独用移位运...

  • 2018-04-24 JAVA 移位运算符

    移位运算符操作的对象就是二进制的位,可以单独用移位运算符来处理int型整数。有三种移位运算符 (<<,>>,>>>...

  • 位运算(1) -- 移位

    位运算是二进制数的各种操作的统称, 本篇是移位操作. 计算机中的位运算操作都是以其补码参与运算 正数的三码(原码/...

  • java移位操作符详解

    左移位操作符 << 按照操作符右侧指定的位数将操作符左边的操作数向左移动,低位补0 为什么转二进制后会是32个1...

  • 移位操作

    正数的移码 移位规则:数符不变:(单:符号位不变,双:第1符号位不变)空位补0:(右移时第二符号位移至尾数最高位)...

  • 程序员的数学笔记2--余数

    上一节程序员的数学笔记1--进制转换是介绍了进制,特别是十进制和二进制之间的转换,移位操作和逻辑操作。 今天介绍的...

  • unity 更改camera的cullingMask

    lua 二进制的移位运算:https://www.jianshu.com/p/e078b79fcb1aC# 二进制...

  • 位移运算符

    1.<< 左移 2.>>> 无符号右移 3.>> 有符号右移 先说说移位,是对一串二进制数进行移位。 分为...

网友评论

      本文标题:【二进制】(你想知道的移位操作)

      本文链接:https://www.haomeiwen.com/subject/gzrwpqtx.html