Java 进制、常量、变量、数据类型、运算符

进制

二进制:由0、1组成,逢二进一,以0b开头,

八进制:由0~7组成,逢八进一,以0开头

十进制:由0~9组成,逢十进一,默认是十进制

十六进制:由0-9,A-F组成,逢十六进一,以0X开头

案例:输出不同进制表现10的数据
二进制:0b10
八进制:010
十进制:10
十六进制:0x10

任意进制到十进制的转换

规则:系数*基数^权数次幂相加
二进制转换为十进制:0b101----> 1*2^0+0*2^1+1*2^2=5

其他进制转换到十进制以此类推

十进制到任意进制的转换

规则:除基取余 直到商为0 余数反转

十进制转换为二进制:

5/2商2余1

2/2商1余0

1/2商0余1

余数反转(自下而上)的二进制为:0b101

原码 反码 补码

原码:即二进制定点表示法

反码:正数的反码与其原码相同;负数的反码是除符号位外对其逐位取反

补码:正数的补码与其原码相同;负数的补码是在其反码的末位加1

案例:

​ 原码:1001011

​ 反码:1110100(除符号位外对位取反)

​ 补码:1110101(反码加1)

变量

  • 什么是变量:在程序执行的过程中,在某个范围内其值可以发生改变的量,定义一个变量,其实就是开辟了一个内存空间

  • 定义格式:数据类型 变量名 = 变量值

数据类型

Java中数据类型的分类:

  1. 基本数据类型

    • 整数型

       类型          字节数			范围
       byte 		 1(8bit)       	-128  ~  127
       short		 2(16bit)	   	-2^15 ~  2^15 - 1
       int		 4(32bit)      	-2^31 ~  2^31 - 1
       long		 8(64bit)      	-2^63 ~  2^63 - 1
      
    • 浮点型

      类型          字节数            范围
      float       4(32bit)      -3.403*10^38  ~ 3.403*10^38
      double     	8(64bit)	  -1.798*10^308 ~1.798*10^308
      
    • 字符型

      类型          字节数            范围
      char       	2(16bit)	   0 ~ 2^16 - 1 = 65535
      
    • 布尔型

      类型          字节数    
      boolean        1
      
  2. 引用数据类型

    如数组,接口,类等

  3. 注意

    • 未初始化的变量不能使用
    • 同一作用域内不能有两个同名变量
    • 同一行可定义多个变量,但不建议

java数据类型的自动类型提升与强制转换

自动类型提升:byte short char 在参与数学运算时,会自动提升为int类型,如果还有long ,float double 参与运算则会相应的提升为 long float double ,布尔类型不参与数学运算,byte short char 之间不发生转换

byte a=10;
short b=20;
byte num=a+b;  //报错,在运算时会转换为int类型,byte类型的num装不下int类型的数据

a=a+1;//报错,1为int类型

强制类型转换:强制将一个数据,转换成我们要的数据类型,强制类型转换,有可能会发生精度损失的问题

格式:目标数据类型 变量名=(目标数据类型)(被转换的数据);

byte a = 1;
byte b = 127;
short c =(short) a+b;//运算时虽然自动转换为int类型,但强制转换为short,且128在short数据类型范围内,此处不会发生精度损失
byte c = (byte)128;//输出-128

案例

byte a=10;
byte b=20;
byte r=a+1;  //报错,int转为byte可能发生精度损失
byte rr=3+4; //不会报错 常量优化机制,多个常量相加时,他会先算出结果,看没有在这个数据类型的范围内,如果在,就不报错,如果不在就会报错
char ch='爱';  //char 占两个字节,gbk编码一个汉字占两个字节  ANSI 也是一个汉字占两个字节,UTF8 一个汉字占三个字节的

字符和字符串参与运算

ASCII码表中: 'a’97 ‘A’ 65 ‘0’ 48

char ch = 'a';
char ch2 = ch+1;//报错,从int转换到char可能会有精度损失
int r = ch+1;//不报错,输出98   

当+号运算两端只要任意一端是一个字符串,那么加号就起连接符的作用,就会将两端的内容拼接起来,形成一个新的字符串

System.out.println("Hello World!"+100); //"Hello World!100"
System.out.println("Hello World!"+100+86);//"Hello World!10086"
System.out.println("Hello World!"+"10086");// "Hello World!10086"	System.out.println(10086+"Hello World!");//"10086Hello World!"
System.out.println(100+"Hello World!"+100+86);//100Hello World!10086
System.out.println(100+86+"Hello World!"+100+86); //186HelloWorld!10086
System.out.println("5+5="+5+5);//"5+5=55"
System.out.println(5+5+"=5+5");//"10=5+5"

运算符

  • 什么是运算符:对常量和变量进行操作的符号称为运算符

  • 运算符的分类:

    ​ 算术运算符
    ​ 赋值运算符
    ​ 比较运算符
    ​ 逻辑运算符
    ​ 位运算符
    ​ 三目运算符

  • 算数运算符有哪些:+ , - , * , / , % , ++ , –

/:整数相除只能得到整数,要得到小数需使用服浮点数

++:自加,对原有的数据进行+1
–:自减,对原有的数据进行-1

++,–运算符单独使用:放在操作数的前面和后面效果一样

++,–参与运算时使用:放在操作数的前面,先自增或者自减,然后再参与运算
放在操作数的后面,先参与运算,再自增或者自减

案例

int a = 3;
a++;//此处a=4
++a;//此处a=5
a--;//a=4
--a;//a=3
int num = a++;  //num=3  a=4
int num2 = ++a;  //num2=5  a=5
  • 赋值运算符

    赋值运算符有哪些:=, +=,-=,*=,/=,%=

    案例:

    byte b =3;
    b = b+1;  //报错
    b+=1;  //不报错,会自动强制类型转换,然后判断累加完的结果,在不在这个数据类型的范围内,如果不在会自动强制类型转换
    
  • 比较运算符

    关系运算符有哪些:== ,!= , < , > , <= , >=

    关系运算符运算结果是booean型

  • 逻辑运算符

    逻辑运算符有哪些:&(并且) , |(或者) , !(非) , ^(异或) , &&(短路与) , ||(短路或)

    逻辑运算符运算结果是booean型

    &(并且) , |(或者) 和 &&(短路与) , ||(短路或) 在运算结果上没有区别,区别在运算效率上:&,运算符两端都会计算,而&&,||只要左端能得出计算结果,则不会执行右端

    int a = 1;
    int b = 2;
    boolean flag = a==2 && (a>b);//&&左端已经为false,则右端不会再进行判断
    System.out.println()
    
  • 三元运算符

    语法:表达式?结果1:结果2

    案例:求两个数最大值

    int a = 1;
    int b = 2;
    int max = a>b?a:b;
    

    三元运算符不建议嵌套,因为嵌套后代码阅读型价较差

  • 位运算符

    位运算符有哪些:&(与),|(或),^(异或) , ~(按位取反) , <<(左移) ,>>(右移) ,>>>(无符号右移)

    &:有0则0
    |:有1则1
    ^:相同则0,不同则1
    ~:按位取反 0变1 1变0

    << : 把<<左边的数据乘以2的移动次幂 例如 10<<3 结果 10*2^3=80

    int flag = 1&2;  //0
    int flag = 1|2;  //3
    int flag = ~3;  //-4
    int num = 3>>2;  //3/2^2=0
    int num = 3<<2;  //3*2^2=12
    

    位运算符是直接对二进制补码进行计算,效率高

你可能感兴趣的:(Java基础)