Loading

进制-运算-数据类型


返回 我的技术栈(Technology Stack)



常量的概念及使用(掌握)


  • 常量:在程序执行的过程中其值不可以发生改变
  • 使用
  •   system.out.println("abc");  //字符串常量
      system.out.println(123);    //整数常量
      system.out.println(12.3);   //小数常量
      system.out.println('1');   //字符常量:用单引号括起来的内容,里面只能放单个数字、单个字母、或单个符号(可以放单个空格)
      System.out.println(true); //布尔常量:较为特殊,只有true和false
    

变量的概念(掌握)


  • 变量:在程序执行的过程中,在某个范围内其值可以发生改变的量

Java语言基础(数据类型的概述和分类)(掌握)


  • A:为什么有数据类型
    • Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存中分配了不同大小的内存空间
  • B:Java中数据类型的分类
    • 基本数据类型
    • 引用数据类型
  • C:基本数据类型分类(4类8种) (掌握)
    • 整数型
      • byte 占一个字节 -128到127
      • short 占两个字 -215~215-1
      • int 占四个字节 -231~231-1
      • long 占八个字节 -263~263-1
    • 浮点型
      • float 占四个字节 -3.403E38~3.403E38 单精度 (注意:如果赋值的为小数,后面必须加f或F)
      • double 占八个字节-1.798E308~1.798E308 双精度 (小数默认的数据类型就是double,所以后面可以不用加d或D)
      • 注意: 实际上float取值范围比long的要大(可用转换验证)
    • 字符型
      • char 占两个字节 0~65535
    • 布尔型
      • boolean
        • boolean理论上是占八分之一个字节,因为一个开关就可以决定是true和false了,但是java中boolean类型没有明确指定他的大小

进制概述(掌握)


  • 单位转换:
    • 1 byte = 8 bit
    • 1 k = 1024 b
    • 1 M = 1024 k
    • 1 G = 1024 M
    • 1 T = 1024 G
  • 数据表现形式:
    • A:二进制:
      • 由0,1组成。以0b或0B开头
    • B:八进制:
      • 由0,1,…7组成。以0开头
    • C:十进制:
      • 由0,1,…9组成。整数默认是十进制的
    • D:十六进制:
      • 由0,1,…9,a,b,c,d,e,f(大小写均可)。以0x开头
  • 数据转换方法:
    • 二进制转十进制:0b100 = 1 * 2 ^ 2 + 0 * 2 ^ 1 + 0 * 2 ^ 0 = 4
    • 八进制转十进制:0100 = 1 * 8 ^ 2 + 0 * 8 ^ 1 + 0 * 8 ^ 0 = 64
    • 十六进制转十进制:0x100 = 1 * 16 ^ 2 + 0 * 16 ^ 1 + 0 * 16 ^ 0 = 256

进制转换问题(掌握)


  • 小转大,自动提升,即隐式转换
  • 大转小,加转换符,即强式转换 int = (int)(12.3 + 11.0)

char字符问题(了解)


      char c = 'a';
      System.out.println(c);     //输出结果:97
     
      char c1 = 100;
      System.out.println(c1);     //输出结果:a

      char c3 = '中';
      System.out.println(c3);     //输出结果:中
      /* Java语言中的字符char可以存储一个中文汉字的原因:
         因为Java语言采用的是Unicode编码。Unicode编码中的每个字符占用两个字节。
         中文也是占的两个字节,所以,Java中的字符可以存储一个中文汉字。
       */

运算问题(掌握)


  • 10/3 -------------整数相除结果只能是整数
  • 10/3.0 ------------ 如果想得到小数,把其中一个数变成小数,另一个数在运算的时候回自动类型提升

符号问题

符号 名称 理解 运用 结果
& 逻辑与 并且(and) a&b true、false

true & true = true
true & false = false
false & true = false
false & false = false

遇false则false(遇佛则佛)

符号 名称 理解 运用 结果
| 逻辑或 或(or) a|b true、false

true & true = true
true & false = true
false & true = true
false & false = false

遇true则true

    ^    逻辑异或
    true & true = false
    true & false = true
    false & true = true
    false & false = false
    相同为false,不同为true

    !    逻辑非 


    &&(短路与)与&的区别:
    1、最终结果都是一样的
    2、&&具有短路的效果。左边是false,右边就不执行
    例如:
      int x = 3;
      int y = 4;
      System.out.println((++x == 3) & (++y == 4)); //false & false = false
      System.out.println("x = " + x);     //x = 4
      System.out.println("y = " + y);     //y = 5

      System.out.println((++x == 3) && (++y == 4)); //false & false = false
      System.out.println("x = " + x);     //x = 4
      System.out.println("y = " + y);     //y = 4

    ||与|的区别:
    1、最终的效果都是一样的
    2、||具有短路的效果,左边为true,右边不执行


    System.out.println(6 & 3);   //结果为2
    解析:&运算规则:有0则0
            110    6的二进制
          & 011    3的二进制
        -----------
            010

    System.out.println(6 | 3);    //结果为7
    解析:|运算规则:有1则1
            110    6的二进制
          | 011    3的二进制
        -----------
            111

    System.out.println(6 ^ 3);    //结果为5
    解析:^运算规则:相同为0,不同为1
            110    6的二进制
          ^ 011    3的二进制
        -----------
            101
         特点:一个数据对另一个数据异或两次,该数据本身不变
                System.out.println(5 ^ 2 ^ 5);            //结果为2
		System.out.println(5 ^ 2 ^ 5 ^ 5 ^ 5);    //结果为2
         面试题:在不使用第三方变量的前提下,交换两个数据
                解析:  int x = 10;
                        int y = 5;
                        x = x ^ y;  // 10 ^ 5
                        y = x ^ y;  // 10 ^ 5 ^ 5 , y = 10
                        x = x ^ y;  // 10 ^ 5 ^ 10 , x = 5
                        System.out.println("x = " + x + ", y = " + y); 


    System.out.println(~6);    //结果为-7
    解析:~运算规则:按位取反
        0000000 00000000 00000000 00000110  6的原码(补码是其本身)
        1111111 11111111 11111111 11111001  对6取反
        1000000 00000000 00000000 00000111  结果为-7(原码)

      

    <<:左移  左边最高位丢弃,右边补0
       举例://左移,向左移动几位就是乘以2的几次幂
             System.out.println(12 << 1);  // 24
             System.out.println(12 << 2);  // 48
            过程:0000000 00000000 00000000 00001100   12的补码
             (0)000000 00000000 00000000 000011000   24的补码
            (00)00000 00000000 00000000 0000110000   48的补码
       面试题:最有效率算出2*8的结果
               System.out.println(2 << 3);
  

    >>:右移  最高位是0,左边补0;最高位是1,左边补1
       举例://右移,向右移动几位就是除以2的几次幂
             System.out.println(12 >> 1);  // 6
             System.out.println(12 >> 2);  // 3
            过程:0000000 00000000 00000000 00001100    12的补码
                  00000000 00000000 00000000 0000110(0)  6的补码
                  000000000 00000000 00000000 000011(00) 3的补码


     >>>:无符号右移   无论最高位是0还是1,左边补0

面试题


  • 面试题:看下面的程序是否有问题,如果有问题,请指出并说明理由。

         byte b1 = 3;
         byte b2 = 4;
         byte b3 = b1 + b2;
      /* 从两方面
         b1和b2是两个变量,变量里面存储的值都是变化的,所以在程序运行中JVM是无法判断里面具体的值
         byte类型(或short,char)的变量在进行运算的时候,会自动类型提升为int类型,相加或的结果也是int类型 
            */
         byte b4 = 3 + 4;
      		/* 3和4都是常量,java有常量优化机制,就是在编译的的时候直接把3和4的结果赋值给b4了*/ 
    
  • 判断输出结果

          System.out.println("5 + 5 = " + 5 + 5 );    //输出结果为 5 + 5 = 55
          System.out.println("5 + 5 = " + (5 + 5));   //输出结果为 5 + 5 = 10
    
  • 判断语句报错

         byte b = 10;
         b++;            //结果为:11     ++运算符会在底层自动补全强制转换符  b = (byte)(b + 1)
         b = b + 1;           //当byte与int进行混合运算时,会提升为int类型,两个int相加仍然为int
         System.out.println(b);
    
  • 判断语句报错

        short s = 1; s = s + 1;  //结果报错。当short与int进行与运算时,会自动提升为int类型,结果也是int类型。
        short s = 1; s += 1;     //结果不报错。运行时,底层自动补全并运行s = (short)(s + 1)
    

posted @ 2021-03-27 22:39  言非  阅读(406)  评论(0编辑  收藏  举报