二进制:

回顾:

  1. 正则表达式:

    • 描述字符串内容格式的,通常用它来匹配字符串内容是否符合要求
    • 正则表达式语法--------------了解
  2. String中与正则表达式相关的方法:
    • matches():使用给定正则表达式来验证当前字符串内容是否符合要求,符合返回true,不符合返回false
    • split():将当前字符串按照满足正则表达式的部分进行拆分,拆分为字符串数组
    • replaceAll():将当前字符串中满足正则表达式的部分替换为指定字符串,返回替换后的字符串
  3. Object:
    • 鼻祖,所有类都直接或间接继承了Object,万物皆对象
    • 其中有两个经常被重写的方法:toString()和equals()
      • Object中的toString()返回的是类的全称@地址,没有参考意义,所以常常重写toString()返回咱们自己需求的数据
      • Object中的equals()比较的还是对象的地址,没有参考意义,所以常常重写equals()来比较对象的属性
  4. 包装类:
    • 8种包装类,为了解决基本数据类型不能参与面向对象开发的问题
    • JDK1.5推出:自动拆装箱特性,允许基本类型与包装类之间直接赋值,底层将会自动补充代码完成转换工作

笔记:

什么是2进制
  1. 逢二进一的计数规则

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

    • 将一个2进制数每个1位置的权值累加即可
  3. Java 所有的变量\常量存储的都是2进制数!

  4. 代码演示:

    public class Demo01 {public static void main(String[] args) {/*1.java在编译期间将10进制数编译为2进制数,按2进制来运算.java(50) 编译后 .class(110010)2.Integer.toBinaryString()可以将底层的2进制数显示出来3.int类型是32位2进制数,显示2进制数时自动省略高位04.System.out.println()将2进制转换为10进制输出*/int n = 50; //110010System.out.println(Integer.toBinaryString(n)); //2进制n++; //110011System.out.println(n); //10进制System.out.println(Integer.toBinaryString(n)); //2进制}
    }
    
什么是16进制
  1. 逢16进1的计数规则
  2. 因为2进制的书写太繁琐麻烦
    00000000 00000000 00000000 00110010
    

    所以常常用16进制来缩写2进制数字

  3. 怎么缩写:将2进制从最低位开始,每4位2进制缩写为1位16进制
  4. 代码演示:
    public class Demo02 {public static void main(String[] args) {/*16进制:缩写2进制1)0x是16进制字面量前缀,0x开头则编译器按照16进制编译2)Java 7提供了2进制字面量前缀 0b----不用,一般都用16进制*/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进制:1)逢8进1的计数规则2)前缀0表示为8进制3)数字:0,1,2,3,4,5,6,7,没有7以上的数字*///----小面试题(8进制平时不用)//权     64 8 1int x =  067; //0开头表示8进制System.out.println(x); //十进制的55(6个8加上7个1)}
    }
    
补码
  1. 计算机中处理有符号数(正负数)的一种编码方式,java中的补码最小类型是int,32位数

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

    • 计算的时候如果超出4位数就自动溢出舍弃,保持4位数不变
    • 将4位2进制数分一半作为负数使用
    • 最高位称为符号位,高位为1是负数,高位为0是正数
      int n = -3;
      System.out.println(Integer.toBinaryString(n));/*
      规律数:
      1)0111为4位补码的最大值,规律是1个0和3个1,可以推导出:32位补码的最大值,是1个0和31个1-----(011111111...)
      2)1000为4位补码的最小值,规律是1个1和3个0,可以推导出:32位补码的最小值,是1个1和31个0-----(100000000...)
      3)1111为4位补码的-1,规律是4个1,可以推导出:32位补码的-1是,是32个1------------(11111111...)
      */
      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...
  3. 深入理解负值:

    • 记住-1的编码是32个1
    • 用-1减去0位置对应的权值
      11111111111111111111111111111111 = -1
      11111111111111111111111111111101 = -1-2 = -3
      11111111111111111111111111111001 = -1-2-4 = -7
      11111111111111111111111110010111 = -1-8-32-64 = -105
      
  4. 互补对称:

    • 公式:-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
      
位运算
~ 取反
& 与运算
| 或运算
>>> 右移位运算
<< 左移位运算
& 与运算
  1. 基本规则:有0则0

    0 & 0 = 0
    0 & 1 = 0
    1 & 0 = 0
    1 & 1 = 1
    
  2. 运算的时候将两个数字对齐,将对应位进行与运算

    权                       84216   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则1

    0 | 0 = 0
    0 | 1 = 1
    1 | 0 = 1
    1 | 1 = 1
    
  2. 运算的时候将两个数位对齐,对应的位进行或运算
    权                       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));
    
>>> 右移位运算
  1. 基本规则:将2进制数整体向右移动,低位自动溢出舍弃,高位补0

    权                      84216   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
    
  2. 代码:
    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));
    
<<左移位运算
  1. 基本规则:将2进制数整体向左移,高位溢出舍弃,低位补0

    权                        84215   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
    
  2. 代码
    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  10  1  0  1 = 5      向左移动0   1  0  1    = 100   1   0  1       = 200   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); //?

精华笔记:

纯底层内容,要求尽量多的吸收,能吸收多少就吸收多少,吸收不了的就放弃

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

    • 2进制:

      • 规则:逢2进1
      • 数字:0 1
      • 基数:2
      • 权:128 64 32 16 8 4 2 1
    • 如何将2进制转换为10进制:
      • 将一个2进制数每个1位置的权值相加即可----------正数
  2. 什么是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进制
  3. 补码:

    • 计算机中处理有符号数(正负数)的一种编码方式,java中的补码最小类型是int,32位数
    • 以4位2进制为例讲解补码的编码规则:
      • 计算的时候如果超出4位数就自动溢出舍弃,保持4位数不变
      • 将4位2进制数分一半作为负数使用
      • 最高位称为符号位,高位为1是负数,高位为0是正数
    • 深入理解负值:
      • 记住-1的编码是32个1
      • 负值:用-1减去0位置对应的权值
    • 互补对称:
      • 结论:一个数的补码=这个数取反+1(取反+1) 公式: -n=~n+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
    
  4. 位运算:

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

    • <<:左移位运算

补充:

  1. 必须掌握的:

    • 什么是2进制
    • 什么是16进制、16进制存在的原因
    • 2进制与16进制之间的换算
权:       64  32  16  8  4  2  11   1   0   0  1  0  0          = 100  右移位1   1   0  0  1  0          = 501   1  0  0  1          = 251  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       = 20int n = 5;
int m = n<<2;
System.out.println(m); //20

CGB2202二进制相关推荐

  1. 二进制与十进制的小数位怎么转?

    二进制转十进制 (0.001)2 ->十进制 从小数点后第一位开始,依次乘2的-1次方 0×2-1 0×2-2 1×2-3 这里已经把上面的小数点后三位全部乘完 然后将结果相加,0 + 0 + ...

  2. 十进制转化为二进制java代码_【模板小程序】任意长度十进制数转化为二进制(java实现)...

    妈妈再也不用担心十进制数过大了233 import com.google.common.base.Strings; import java.math.BigInteger; import java.u ...

  3. etcd 笔记(02)— etcd 安装(apt 或 yum 安装 、二进制包安装、Docker 安装 etcd、etcd 前端工具etcdkeeper)

    1. 使用 apt 或 yum 安装 etcd 命令如下: sudo apt-get install etcd 或者 sudo yum install etcd 这样安装的缺点是:安装的 etcd 版 ...

  4. python二进制打开(rb)和文本格式打开(r)什么区别?

    使用 open() 函数以文本格式打开文件和以二进制格式打开文件,唯一的区别是对文件中换行符的处理不同. 在 Windows 系统中,文件中用 "\r\n" 作为行末标识符(即换行 ...

  5. 【课堂笔记系列】二进制

    一.你不知道的二进制? 1.接触二进制的时候,一定又在无聊犯困.这玩意有什么用处,学它干嘛?现在来告诉你吧! Eg:最常见却最熟视无睹的例子.电脑的分辨率到底是什么意思? 电脑的图像处理通过二进制,电 ...

  6. LeetCode简单题之二进制表示中质数个计算置位

    题目 给你两个整数 left 和 right ,在闭区间 [left, right] 范围内,统计并返回 计算置位位数为质数 的整数个数. 计算置位位数 就是二进制表示中 1 的个数. 例如, 21 ...

  7. java 抽象方法 虚方法的区别_声明抽象类(纯虚方法)会大幅增加二进制大小

    以下是故事:我正在使用AC6 Toolpack为Linux中的ARM Cortex-M0处理器开发C软件 . 在我使用Keil(在windows中)(拥有自己的工具链)之前,我已经迁移到GNU-too ...

  8. python 十进制转二进制,十进制转八进制,十进制转十六进制 的方法

    python 转二进制使用:bin, 八进制使用oct 十六进制使用:hex 下面说下使用 a = 1234 print("十进制数为: ", a) print("转换为 ...

  9. Java 二进制,八进制,十进制,十六进制

    学而时习之,温故而知新 二进制特征: 1 : 有2个数字组合,"0" 和"1" 2 : 运算时逢2进1 例如 101010 八进制的特点: 1: 有 8个数组组 ...

最新文章

  1. Bminer 7.0.0 ETH挖矿教程(Linux 64)
  2. python实现excel数据透视表_用python建立excel的数据透视表
  3. Java基础之移位运算,为什么高位补1?
  4. linux安装 mysql-5.7.25_Linux 系统下安装 mysql5.7.25(glibc版)
  5. Linux数据文件自动迁移,linux下增加磁盘改变指定文件路径分区挂载点和迁移数据...
  6. 【笔记】大数定理证明
  7. 高级SQL注入拿shell,一般黑客不知道。哈客
  8. pojBuy Tickets2828线段树或者树状数组(队列中倒序插队)
  9. linux 驱动读写文件,Linux下读写寄存器
  10. linux的poll_wait函数,select() 与 poll()两个函数接口的作用
  11. 凸优化第五章对偶 作业题
  12. C++简介(5)STL
  13. 数字电子技术期末考试思维导图
  14. 【pwn】记一道shellcode侧信道攻击
  15. Springboot连接Redis超时问题解决
  16. Uniapp 动态修改状态栏、导航栏背景色、字体图标颜色插件 Ba-AppBar
  17. 仅限中国:AMD推出Radeon RX 560 XT
  18. 网上流量卡这么便宜,线上申请的流量卡有虚标吗
  19. 仓库摆放示意图_仓库货物摆放标准
  20. 卡片 -【2020牛客NOIP-普及组(第四场)】

热门文章

  1. uoj#420. 【集训队作业2018】矩形(组合数学)
  2. 苹果被迫弃用 Lightning?欧盟宣布 2024 年 Type-C 将 “一统天下”
  3. NSC2018第六届中国网络安全大会7大论坛引爆行业热点!
  4. Integer 与 Int 的区别
  5. 实在智能与浙江工商大学官宣战略合作,共建人工智能联合实验室和实习基地
  6. python+selenium+phantomJS爬取国家地表水水质自动监测实时数据发布系统——动态网页爬虫
  7. linux下那些服务可以禁用掉
  8. 【C语言探索之旅】 第三部分第一课:SDL开发游戏之安装SDL
  9. dd命令中dsync和fsync区别
  10. 如果光速会变,并不绝对,物理学将一夜回到400年前