栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

CGB2202二进制

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

CGB2202二进制

二进制: 回顾:
    正则表达式:

    描述字符串内容格式的,通常用它来匹配字符串内容是否符合要求正则表达式语法--------------了解 String中与正则表达式相关的方法:

    matches():使用给定正则表达式来验证当前字符串内容是否符合要求,符合返回true,不符合返回falsesplit():将当前字符串按照满足正则表达式的部分进行拆分,拆分为字符串数组replaceAll():将当前字符串中满足正则表达式的部分替换为指定字符串,返回替换后的字符串 Object:

    鼻祖,所有类都直接或间接继承了Object,万物皆对象其中有两个经常被重写的方法:toString()和equals()

    Object中的toString()返回的是类的全称@地址,没有参考意义,所以常常重写toString()返回咱们自己需求的数据Object中的equals()比较的还是对象的地址,没有参考意义,所以常常重写equals()来比较对象的属性 包装类:

    8种包装类,为了解决基本数据类型不能参与面向对象开发的问题JDK1.5推出:自动拆装箱特性,允许基本类型与包装类之间直接赋值,底层将会自动补充代码完成转换工作

笔记: 什么是2进制

    逢二进一的计数规则

    如何将2进制转换为10进制?

    将一个2进制数每个1位置的权值累加即可

    Java 所有的变量常量存储的都是2进制数!

    代码演示:

    public class Demo01 {
        public static void main(String[] args) {
            
            int n = 50; //110010
            System.out.println(Integer.toBinaryString(n)); //2进制
            n++; //110011
            System.out.println(n); //10进制
            System.out.println(Integer.toBinaryString(n)); //2进制
        }
    }
    
什么是16进制
    逢16进1的计数规则因为2进制的书写太繁琐麻烦
    00000000 00000000 00000000 00110010
    
    所以常常用16进制来缩写2进制数字怎么缩写:将2进制从最低位开始,每4位2进制缩写为1位16进制代码演示:
    public class Demo02 {
        public static void main(String[] args) {
            
            int n = 0x4f057afe; //0x表示16进制
            int m = 0b1001111000001010111101011111110; //0b表示二进制
            System.out.println(Integer.toBinaryString(n)); //按2进制输出
            System.out.println(Integer.toBinaryString(m)); //按2进制输出
            //结论:用16进制来表示2进制更方便
    
            
            //----小面试题(8进制平时不用)
            //权     64 8 1
            int x =  067; //0开头表示8进制
            System.out.println(x); //十进制的55(6个8加上7个1)
    
        }
    }
    
补码

    计算机中处理有符号数(正负数)的一种编码方式,java中的补码最小类型是int,32位数

    以4位2进制为例讲解补码的编码规则:

    计算的时候如果超出4位数就自动溢出舍弃,保持4位数不变将4位2进制数分一半作为负数使用最高位称为符号位,高位为1是负数,高位为0是正数

    int n = -3;
    System.out.println(Integer.toBinaryString(n));
    
        
    int max = 2147483647; //int的最大值
    int min = -2147483648; //int的最小值
    System.out.println(Integer.toBinaryString(max)); //011111...
    System.out.println(Integer.toBinaryString(min)); //100000...
    System.out.println(Integer.toBinaryString(-1)); //11111...
    
    

    深入理解负值:

    记住-1的编码是32个1用-1减去0位置对应的权值

    11111111111111111111111111111111 = -1
    11111111111111111111111111111101 = -1-2 = -3
    11111111111111111111111111111001 = -1-2-4 = -7
    11111111111111111111111110010111 = -1-8-32-64 = -105
    

    互补对称:

    公式:-n=~n+1 结论:一个数的补码=这个数取反+1

    举例说明:

    int n = -3;
    int m = ~n+1;
    System.out.println(m); //3  -3的补码就是-3取反+1
    

    面试题:

    System.out.println(~100+1); 上述代码的运算结果是(C)  注:求100的补码
    A. -98  B.-99 C.-100 D.-101
    System.out.println(~-100+1); 上述代码的运算结果是(C)  注:求-100的补码
    A.98  B.99  C.100  D.101
    
位运算
~ 取反
& 与运算
| 或运算
>>> 右移位运算
<< 左移位运算
& 与运算

    基本规则:有0则0

    0 & 0 = 0
    0 & 1 = 0
    1 & 0 = 0
    1 & 1 = 1
    

    运算的时候将两个数字对齐,将对应位进行与运算

    权                       8421
              6   1    4   f    7   b    b   b
    n  =      01100001 01001111 01111011 10111011
    m  =      00000000 00000000 00000000 11111111  0xff
    k  = n&m  00000000 00000000 00000000 10111011
    

    上述代码的用途:

    将n的最后8位拆分出来,存储到k中m数称为掩码,8个1称为8位掩码上述运算称为:掩码运算

    代码:

    int n = 0x614f7bbb;
    int m = 0xff; //掩码
    int k = n & m; //将n的最后8位数拆分出来,存储到k中
    System.out.println(Integer.toBinaryString(n));
    System.out.println(Integer.toBinaryString(m));
    System.out.println(Integer.toBinaryString(k));
    
| 或运算
    基本规则:有1则1
    0 | 0 = 0
    0 | 1 = 1
    1 | 0 = 1
    1 | 1 = 1
    
    运算的时候将两个数位对齐,对应的位进行或运算
    权                       8421
    n  =      00000000 00000000 00000000 10111001   0xb9
    m  =      00000000 00000000 10111101 00000000   0xbd00
    k  = n|m  00000000 00000000 10111101 10111001
    
    如上案例的意义:错位合并
    代码:
    int n = 0xb9;
    int m = 0xbd00;
    int k = n | m; //将n与m错位合并
    System.out.println(Integer.toBinaryString(n));
    System.out.println(Integer.toBinaryString(m));
    System.out.println(Integer.toBinaryString(k));
    
>>> 右移位运算
    基本规则:将2进制数整体向右移动,低位自动溢出舍弃,高位补0
    权                      8421
               6   7    9   f    1   d    9   8
    n =        01100111 10011111 00011101 10011000
    m = n>>>1  001100111 10011111 00011101 1001100
    k = n>>>2  0001100111 10011111 00011101 100110
    g = n>>>8  00000000 01100111 10011111 00011101
    
    代码:
    int n = 0x679f1d98;
    int m = n>>>1;
    int k = n>>>2;
    int g = n>>>8;
    System.out.println(Integer.toBinaryString(n));
    System.out.println(Integer.toBinaryString(m));
    System.out.println(Integer.toBinaryString(k));
    System.out.println(Integer.toBinaryString(g));
    
<<左移位运算
    基本规则:将2进制数整体向左移,高位溢出舍弃,低位补0
    权                        8421
                 5   e    4   e    0   d    e   e
    n =          01011110 01001110 00001101 11101110
    m = n<<1     1011110 01001110 00001101 111011100
    k = n<<2     011110 01001110 00001101 1110111000
    
    代码
    int n = 0x5e4e0dee;  
    int m = n<<1;
    int k = n<<2;
    System.out.println(Integer.toBinaryString(n));
    System.out.println(Integer.toBinaryString(m));
    System.out.println(Integer.toBinaryString(k));
    
移位运算的数学意义
权    64  32  16  8  4  2  1
                  0  1  0  1 = 5      向左移动
              0   1  0  1    = 10
          0   1   0  1       = 20
      0   1   0   1          = 40

左移位代码:自行编码验证

int n = 5;
System.out.println(n<<1); //10
System.out.println(n<<2); //20
System.out.println(n<<3); //40

右移位代码:自行编码验证

int n = 100;
System.out.println(n>>>1); //?
System.out.println(n>>>2); //?
System.out.println(n>>>3); //?
精华笔记: 纯底层内容,要求尽量多的吸收,能吸收多少就吸收多少,吸收不了的就放弃

    什么是2进制:逢2进1的计数规则,计算机中的变量/常量都是按照2进制来运算的

    2进制:

    规则:逢2进1数字:0 1基数:2权:128 64 32 16 8 4 2 1 如何将2进制转换为10进制:

    将一个2进制数每个1位置的权值相加即可----------正数

    什么是16进制:逢16进1的计数规则

    16进制:

    规则:逢16进1数字:0 1 2 3 4 5 6 7 8 9 a b c d e f基数:16权:4096 256 16 1 用途:因为2进制书写太麻烦,所以常常用16进制来缩写2进制数字如何缩写:将2进制从最低位开始,每4位2进制缩写为1位16进制

    补码:

    计算机中处理有符号数(正负数)的一种编码方式,java中的补码最小类型是int,32位数以4位2进制为例讲解补码的编码规则:

    计算的时候如果超出4位数就自动溢出舍弃,保持4位数不变将4位2进制数分一半作为负数使用最高位称为符号位,高位为1是负数,高位为0是正数 深入理解负值:

    记住-1的编码是32个1负值:用-1减去0位置对应的权值 互补对称:

    结论:一个数的补码=这个数取反+1(取反+1) 公式: -n=~n+1
    6的补码=6取反+1
    -3的补码=-3取反+1面试题:

    System.out.println(~100+1);  前面代码的运算结果是(C):注:求100的补码
    A.-98  B:-99  C:-100  D:-101
    System.out.println(~-100+1); 前面代码的运算结果是(C): 注:求-100的补码
    A.98   B:99   C:100   D:101
    

    位运算:

    ~:取反(0变1、1变0)&:与运算(有0则0)|:或运算(有1则1)

    :右移位运算

    <<:左移位运算
补充:
    必须掌握的:

    什么是2进制什么是16进制、16进制存在的原因2进制与16进制之间的换算

权:       64  32  16  8  4  2  1
          1   1   0   0  1  0  0          = 100  右移位
              1   1   0  0  1  0          = 50
                  1   1  0  0  1          = 25
                      1  1  0  0          = 12 


权:       64  32  16  8  4  2  1
n                     0  1  0  1 = 5
m                  0  1  0  1    = 10
k             0    1  0  1       = 20

int n = 5;
int m = n<<2;
System.out.println(m); //20


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/776884.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号