二进制相关基础知识(1)

简介: 二进制相关基础知识

二进制


1 什么是二进制


二进制:逢二进一的计数规则。


计算机底层 也就是 数据类型都是2进制的! int long float double 等 都是2进制的!

int 类型内部是 32位2进制数,8位称为1个字节,32位2进制数也称为4字节

long 类型内部是 64位2进制数,8位称为1个字节,64位2进制数也称为8字节

float double 内部采用 浮点数2进制表示 IEEE-754标准,今天不讨论

计算机内部为啥使用2进制:2进制的制造成本最低!

计算机如何处理10进制和2进制:


image.png

案例:

public class Demo01 {
  public static void main(String[] args) {
    /*
     * 1 Java内部一切数据都是2进制的! 如 int n 在内存中就是2进制 
     * 
     */
    int n = 50; //编译期间,将"50"转化为110010, 程序执行时候 n 就是110010
    System.out.println(n); //输出时候 println 方法将 110010 转化为“50”输出
    //Java 提供了输出数据2进制的功能,利用这个功能就可以显示数据的2进制,在内存中的情况
    System.out.println(Integer.toBinaryString(n)); 
    n = 51;
    System.out.println(Integer.toBinaryString(n)); 
    for(int i=0; i<100; i++) {
      System.out.println(Integer.toBinaryString(i)); 
    }
    /*
    00000000 00000000 00000000 00000000
    00000000 00000000 00000000 00000001
    00000000 00000000 00000000 00000010
    00000000 00000000 00000000 00000011
    00000000 00000000 00000000 00000100
    00000000 00000000 00000000 00000101
    00000000 00000000 00000000 00000110
    00000000 00000000 00000000 00000111
    00000000 00000000 00000000 00001000
    00000000 00000000 00000000 00001001
    00000000 00000000 00000000 00001010 = 8+2 = 10
    00000000 00000000 00000000 00001011
    00000000 00000000 00000000 00001100
    00000000 00000000 00000000 00001101
    00000000 00000000 00000000 00001110
    00000000 00000000 00000000 00001111
     */
  }
}


2 什么是16进制


逢16进一的计数规则

进制直接量,书写冗长麻烦!计算机编程语言采用16进制作为2进制的缩写

缩写规则:2进制从最低位开始,每4位缩写为1位16进制数

image.png


案例:


public class Demo02 {
  public static void main(String[] args) {
  /*
   * Java 7 以后提供了2进制直接量语法,前缀0b开头的2进制直接量
   * 2进制直接量,书写冗长麻烦!
   */
  int n = 0b110010; //50
  System.out.println(Integer.toBinaryString(n)); 
  n = 0b1001111101000101010001001011111;// 2进制直接量,书写冗长麻烦!
  System.out.println(Integer.toBinaryString(n));
  n = 0x4fa2a25f; //利用16进制缩写2进制,使用方便
  System.out.println(Integer.toBinaryString(n));
  n = 0b11001111101000101010001001011111;
  System.out.println(n); 
  }
}


3 补码


计算机中负数的编码。其目的是解决负数问题。


设计思想:将固定位数的2进制数分一半作为负数使用的一种编码。


基本运算规则:


固定位数,计算时候,超过固定位数就自动溢出舍弃,始终保持固定的位数

将高位为1的数作为负数使用

采用倒推的方式为负数编码

以4位数补码位例子研究补码。然后推广到32位(int)

image.png


案例

public class Demo03 {
  public static void main(String[] args) {
    /*
     * 验证int\long类型的补码编码
     * 
     */
    int max = Integer.MAX_VALUE;
    int min = Integer.MIN_VALUE;
    System.out.println(max);
    System.out.println(min);
    System.out.println(Integer.toBinaryString(max));
    System.out.println(Integer.toBinaryString(min));
    long lmax = Long.MAX_VALUE;
    long lmin = Long.MIN_VALUE;
    System.out.println(Long.toBinaryString(lmax));
    System.out.println(Long.toBinaryString(lmin));
    int n = -1;
    System.out.println(Integer.toBinaryString(n)); 
    long l = -1L;
    System.out.println(Long.toBinaryString(l)); 
    System.out.println("如何认识负数:");
    System.out.println(Integer.toBinaryString(n)); 
    int m = -4;
    System.out.println(Integer.toBinaryString(m)); 
    System.out.println(Integer.toBinaryString(-12)); 
    System.out.println(Integer.toBinaryString(-44)); 
    /*
     * 如何认识负数:
        11111111111111111111111111111111   -1
        11111111111111111111111111111100   -1-1-2 = -4
        11111111111111111111111111110100   -1-1-2-8= -12
        11111111111111111111111111010100   -1-1-2-8-32 = -44
        11111111111111111111111111001111   -1-16-32 = -49
     */
    for(int i=-200; i<0; i++) {
      System.out.println(Integer.toBinaryString(i));
    } 
  }
}
目录
相关文章
【面试题精讲】如何将二进制转为十六进制
【面试题精讲】如何将二进制转为十六进制
|
7月前
|
算法 C++
C/C++基础知识——字符串(三)
C/C++基础知识——字符串
241 0
|
7月前
|
人工智能 BI C++
C/C++基础知识——字符串(一)
C/C++基础知识——字符串
120 0
|
7月前
|
安全 数据安全/隐私保护 C++
C/C++基础知识——字符串(二)
C/C++基础知识——字符串
267 0
|
7月前
|
自然语言处理 Rust 编译器
【0到1的设计之路】从C语言到二进制程序
【0到1的设计之路】从C语言到二进制程序
100 0
|
存储 网络协议 C语言
C语言进阶教程(大小端存储)
C语言进阶教程(大小端存储)
107 0
二进制基础
二进制基础
63 0
|
存储 安全 编译器
>>>C语言<<< 前言、什么是C语言 、标准格式 、数据类型 、数据的输入和输出 、结束语
>>>C语言<<< 前言、什么是C语言 、标准格式 、数据类型 、数据的输入和输出 、结束语
117 0
|
存储 C语言
【C语言_复习_学习第二课】什么是进制?进制之间应该如何转换
什么是进制?在我们的生活中处处充满进制,一天是24个小时、一个小时是60分钟、一分钟是60秒、一个星期一共7天........还有大家听说过半斤八两这个词语吗?也就是说买半斤东西也就是八两,一斤也就是十六两,满16进一位这就是十六进制。我今天就当一次小学老师来考考你,5+8等于多少(我没有在和大家开玩笑)你会说等于13,你的回答就是十进制也就是满十进一,而在计算机中数字都是以二进制(只有1和0)存储的也就是满二进一位,当然也有八进制(从0到7)、十六进制(从0到F)都是类似的,八进制满八进一位,十六进制满十六进一位(其中十六进制10用A来表示,11-B、12-C、13-D、14-E、15-F)
121 0
|
存储 编译器 C语言
【C语言】简述大小端存储
【C语言】简述大小端存储
432 0