Java学习Day03

day03:进制、变量

一、进制

  1. 定义:计数时进位的机制

  2. 日常常见的进制

    1. 十进制

      满十进一

      组成:0,1,2,3,4,5,6,7,8,9

      特点:

      ​ 9+1 = 10

      ​ 19 +1 =20

        99+1 =100
      
    2. 二进制

      满二进一

      组成:0 1

      特点

      ​ 1 + 1 = 10

      ​ 11 +1 = 100

      标识:

      ​ 从JDK1.7开始,,允许程序中以0b或者0B开头标识一个二进制的数

    3. 八进制

      满八 进一

      组成 : 0 1 2 3 4 5 6 7

      特点

      ​ 7+1 = 10

      ​ 17 +1 =20

      ​ 77+1 = 100

      标识:

      ​ 在程序中需要以0开头标识一个八进制的数字,所以八进制应该写为

      ​ 07, 05 , 015

    4. 十六进制

      满16进一

      组成:0-9 a-f(A-F) 0 1 2 3 4 5 6 7 8 9 A B C D E F

      特点:

      ​ 9+1 = a

      ​ a+1 =b

      F+1 = 10

      ​ 2F +1 =30

      ​ 99+1 = 9A

      ​ 9F+1= A0

      ​ FF + 1 = 100

      标识:

      ​ 在程序中需要以0x或者0X开头标识一个十六进制的数,所以十六进制的数应该写为

      0x2 0X3A 0xF5A等

  3. 进制之间的转换

    1. 十进制数据转成二进制数据: 使用除二倒取余的方式

      123

      13

    2. 二进制数据转成十进制数据:

      从这个二进制数字的低位次开始,按照位次乘以2的位次次幂,然后将这些幂求和

    3. 二进制转换八进制

      二进制转化为八进制:从这个二进制数字的低次位,每三个划为一组,每一组产生一个八进制数字,如果最高位不足三位,则补0,所以二进制向八进制转换是一个三位变一位的过程

    4. 八进制转换二进制

      八进制转换二进制:每一位八进制数字产生三位二进制数字,如果产生的二进制数组不足三位补0

    5. 二进制转16进制

      二进制转化为十六进制的过程和二进制转化为八进制的过程有些类似,是从低次位开始,每4位二进制数字分为一组产生一个十六进制的数字,同样,最高位不足4位补0

    6. 十六进制转二进制

      十六进制转化为二进制的过程和八进制转换为二进制的过程有些类似,也是从低次位开始,每一位十六进制的数字产生四位二进制的数字,同样,如果产生的数字不足4位需要补0

二、原码,反码,补码

  • 问题提出

    • 问题提出

      在计算机中,实际上默认是以32位的二进制来存储一个整数

      为了表述负数:规定正数的最高位为0,负数的最高位为1

      如:

      ​ 18:00000000 00000000 00000000 00010010

      ​ -9: 10000000 00000000 00000000 00001001

      5: 00000000 00000000 00000000 00000101

      -5:100000000 00000000 00000000 00000101

      5+(-5) = -10?

       5: 00000000  00000000  00000000  00000101
      -5: 10000000  00000000  00000000  00000101
      和:  10000000  00000000  00000000  00001010 
      
      
  • 原码,反码,补码

    1. 在计算机中,数据是以二进制形式来存储的,任意的数据在计算机中都存在三种形式:原码,反码,补码

    2. 原码是直接可以计算出来的二进制数据,其中二进制的最高位是符号位,如果最高位是0,表示该值是一个正数,如果最高位是1,则表示该数字是负数,

      1. 正数:原码,反码,补码是一样的

        18

        原码:00000000   00000000  00000000  00010010
        反码:00000000   00000000  00000000  00010010
        补码:00000000   00000000  00000000  00010010
        
      2. 负数

        对于负数而言,直接计算出来的是它的原码,反码是在原码的基础上保持最高位不变,其他的位置上的0变1,1变0,补码是在反码的基础上+1

        -9

        原码: 10000000  00000000  00000000  00001001
        反码: 11111111  11111111  11111111  11110110
        补码: 11111111  11111111  11111111  11110111
        

        计算机在存储的时候存的是数据的补码,对数据计算,算的也是数据的补码

        5

        原码:00000000  00000000  00000000  00000101
        反码:00000000  00000000  00000000  00000101
        补码:00000000  00000000  00000000  00000101
        

        -5

        原码:10000000  00000000  00000000  00000101
        反码:11111111  11111111  11111111  11111010
        补码:11111111  11111111  11111111  11111011
        

        5+(-5)=

         5的补码:00000000  00000000  00000000  00000101
        -5的补码:11111111  11111111  11111111  11111011
        5+(-5)=:100000000  00000000  00000000  00000000(计算出来的结果是33位)
        结果:    00000000  00000000  00000000  00000000
        整数类型,计算机默认从低次位开始存,存32位,如果超过32位,高位舍弃
        

        练习:

        ​ -7

        原码:10000000 00000000 00000000 00000111
        反码:11111111 11111111 11111111 11111000
        补码:11111111 11111111 11111111 11111001
        

        给出一个补码:

        补码:11111111 11111111 11111111 11010111
        

        计算其存储的数值是多少?

        先计算反码:(补码-1),再计算原码
        补码:11111111 11111111 11111111 11010111
        反码:11111111 11111111 11111111 11010110
        原码:10000000 00000000 00000000 00101001
        转十进制:-(1+8+32)=-41
        

    三、内存单位

    1. 字节(Byte): 是计算机中的一种计量单位,一字节等于八位。

    2. 位(bit): 是数据存储的最小单位。也就是二进制。二进制数系统中,每个0或1就是一个位,叫做bit(比特),其中8 bit 就称为一个字节(Byte)。

    3. 常用的内存转换

      字节 1Byte = 8bit

      千字节: 1KB = 1024 Byte

      兆字节 1MB = 1024 KB

      吉字节 1GB = 1024 MB

      太字节 1TB = 1024GB

    四、变量和数据类型

    1. 变量

      1. 概念:在程序执行的过程中,其值可以发生改变
      2. 本质:是一个内存空间的表示
      3. 作用:存储数据的
      4. 概括:变量就是内存中的一块用于存储数据的空间,其值在程序运行过程中可以改变。
    2. 变量三要素

    变量的名称,值,类型

    1. 变量声明

      int a;  //声明了一个整数类型的变量,变量名是a
      int b,c,d; // 声明了三个整数类型的变量,变量名分别是b,c,d
      
    2. 变量的命名规则

      • 只能包含字母,数字,_和$,并且不能以数字开头,中间不能有空格
      • 严格区分大小写
      • 不能使用关键字,可以包含关键字
      • 允许使用中文,但是不建议,建议“英文单词见名知意”,遵循小驼峰命名规则
    3. 变量的声明及使用

      1. 初始化:第一次赋值

      2. 声明的同时初始化

        //2.1 声明的同时并初始化
        //1>声明一个整型变量,变量名为a
        //2>给a赋值为5
        int a = 5;
        
      3. 先声明,后初始化

        int b,c,d; //声明三个整型变量,变量名分别为b,c,d
        b = 5;  //给b赋值为5
        c = 4;  //给c赋值为4
        d = 12; //给d赋值为12
        
      4. 对变量进行操作,实际上是对它所存的那个数据进行操作的

        int e = a + 10;  // 取出变量a中的数据5,用5和10相加,把结果赋值给整型变量e
        System.out.println("e=" + e); //输出e的值15
        
        System.out.println("e");  //双引号中的内容原样输出
        System.out.println(e);    //变量e,输出的是变量e中存储的值 15
        
      5. 变量的操作必须类型匹配

        /*
         代码下方有红色波浪线,表示报错
          此处表示编译错误, 执行 javac VariableTest.java 命令的时候报错
        */
        int pi = 3.1415926;  //编译不通过,类型不匹配
        
      6. 变量值使用之前,必须声明并初始化

        System.out.println(m); //变量未声明
        int m;
        System.out.println(m); //变量未初始化
        
      7. 基本数据类型

        八种基本数据类型:

        byte short int long float double boolean char

        四类八种

        • 整数类

          1. byte : 字节 1个字节 8位 范围 -128~ 127 之间 -2^7 ~ 2^7-1

          2. short

            短整型 2字节 16位 范围-32768~32767 -2^15~ 2^15-1

          3. int

            整型 4字节 32位 范围:-21亿多到21亿多 -2^31 ~ 2^31-1

            • 整数直接量默认就是int类型,但是不能超出范围,如果超出范围则编译错误

            • 两个整数相除,结果还是整数,小数位无条件舍弃(不会四舍五入)

            • 运算时如果超出范围,则会发生溢出,溢出不是错,但是要避免。

            • 从JDK1.7开始,允许在数字中以间隔,在编译的时候会直接省略掉_

              如:int i = 21_4748_3647

          4. long

            长整型 8个字节 64位,-900万万亿~900万万亿 -263~263-1

            • 表示长整型直接量,在直接量末尾加L或者l
            • 运算时如果有可能溢出,建议在第一个数字后面加L
            • System.currentTimeMillis();返回一个Long值,指的是1970年1月1日0:时到此时此刻系统时间的毫秒数
        • 浮点类型

          • float

            单精度浮点类型 4字节 大概范围 -10^38~ 10^38

            在Java中float类型的数据需要在末尾添加f/F

            float虽然占4个字节,但是它比long的8个字节范围还要打,因为小数的存储用到了科学计数法

          • double

            双精度, 8字节 ,很大很大很大

            小数直接量默认都是double类型,如果想要表示float需要在直接量结尾加 F/f

            不能表示精确的数据,运算时可能会发生舍入误差,需要精确计算的场合不适用

            如:0.1+0.2 结果不是0.3

        • 字符类型

          char 字符型,2 个字节, 0~2^32-1 0~25535

          字符型直接量必须放在单引号中,只能有一个字符

          采用的是Unicode编码格式,一个字符就是一个编码

          我们看到的字符char 本质上就是int(0到65535),需要记住几个特殊的ASCII码

          ‘a’ - 97

          ‘A’ - 65

          ‘0’ - 48

        • 布尔类型

          boolean 只有两个取值:true ,false ,1个字节。

      五、码表

      1. 按照一定的规则,将字符映射成数字,这个映射过程就是编码的过程,记录这个映射的表格就是码表

      2. 世界范围内常见的码表

        1. ASCII码:只包含,字母,数字,标点符号,特殊字符等127个字符

        2. 西欧码表:ISO-8859-1 一个字符对应一个字节

        3. 中国码表:GBK

          1. gb2312 只支持简体中文,中国大陆
          2. BIG5 只支持繁体中文 台湾
          3. GBK,在gb2312基础上做的扩展 ,兼容gb2312的
          4. GB18030: 兼容GBK,包含日文,朝鲜文,韩语等
        4. Unicode 万国码 统一码联盟 推出的 ,

          Unicode一套编码体系,UTF-8 UTF-16 UTF-32

      3. 因为ISO-8859-1出现的比较早,所以要求所有的码表都兼容ISO-8859-1

      4. 对于中文的存储

        1. UTF-8是以3个字节存储一个汉字的
        2. GBK是以2个字节存储一个汉字的。
posted @ 2023-07-25 09:53  wi_z  阅读(49)  评论(0)    收藏  举报