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

进制

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

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

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

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

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

任意进制到十进制的转换

规则:系数*基数^权数次幂相加

1
二进制转换为十进制: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)

变量

什么是变量

  • 在程序执行的过程中,在某个范围内其值可以发生改变的量,定义一个变量,其实就是开辟了一个内存空间
  • 变量本质上是内存中的一块空间,这块空间“有数据类型”、“有名字”、“有字面值”
  • 变量包括:数据类型 名字 字面值;
  • 变量是内存中存储数据的最基本的单元

数据类型的作用:指导数据在内存中开辟多大的空间

  • 不同的数据有不同的类型,不同的数据类型底层会分配不同大小的空间
  • 数据类型是指导程序在运行阶段应该分配多大的内存空间
  • 变量要求:变量中存储的具体的“数据”必须和变量的“数据类型”一致

定义格式

  • 数据类型 变量名 = 变量值

变量声明后怎么赋值

变量名 = 字面值;

=等号是一个运算符,叫做赋值运算符,赋值运算符先运算等号右边的表达式,表达式执行结束后的结果赋值给左边的变量。

声明和赋值可以放到一起完成

1
int i = 10;

变量赋值之后可以重新赋值,变量的值可变化

1
2
3
4
5
6
int i = 10;
System.out.println(i); //10
i = 20;
System.out.println(i); //20
i = 30;
System.out.println(i); //30

有了变量的概念之后,内存空间得到了重复的使用

通常访问一个变量包括两种访问形式

  • 第一种:读取变量中保存的具体数据 get/获取
  • 第二种:修改变量中保存的具体数据 set/设置
1
2
i = 20;  //set
System.out.println(i); //get

变量在一行上可以声明多个

1
2
3
4
int a,b,c
//一行上可以同时声明多个变量
int a,b,c=300;
//这一行说明只是给c赋值了,a,b并没有

变量必须先声明,再赋值,才能访问

1
2
3
4
5
6
7
8
9
10
11
public class Varible {
public static void main (String[] args){
int i; //程序执行到这里,内存空间没有开辟出来,变量i并没有初始化
//所以没有赋值之前是无法访问的
// System.out.println(i); //编译报错

//给i赋值,完成初始化,内存开辟
i = 100;
System.out.println(i);//100
}
}

*变量的分类

根据变量声明的位置来分类:

局部变量

​ 在方法体当中声明的变量叫做局部变量

成员变量

​ 在方法体外(类体内)声明的变量叫成员变量

  • 在不同作用域中,变量名可以相同,就近原则

数据类型

  • 不同数据数据类型的数据占用空间大小不同。

  • 数据类型作用是指导JVM在运行程序时给数据分配多大的内存空间。

  • Java中数据类型的分类:

​ 基本数据类型

​ 引用数据类型

基本数据类型

整数型

1
2
3
4
5
类型          字节数			范围
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

浮点型

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

字符型

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

换行符 \n

制表符 \t

布尔型

1
2
类型          字节数    
boolean 1

整数默认是int类型的 , 浮点数默认是 double类型的

引用数据类型

如数组,接口,类等

注意:

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

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

自动类型提升

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

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

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

强制类型转换

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

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

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

案例

1
2
3
4
5
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

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

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

1
2
3
4
5
6
7
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
    2
    3
    4
    5
    6
    算术运算符	
    赋值运算符
    比较运算符
    逻辑运算符
    位运算符
    三目运算符

    注意事项:

    a:整数相除只能得到整数。如果想得到小数,请使用浮点数
    b:/获取的是除法操作的商,%获取的是除法操作的余数
      %运算结果的符号,取决于参与运算是左边的符号。  
    

算数运算符

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

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

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

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

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

放在操作数的后面,先参与运算,再自增或者自减

案例

1
2
3
4
5
6
7
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

赋值运算符

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

案例:

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

比较运算符

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

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

逻辑运算符

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

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

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

案例:

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

三元运算符

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

案例:求两个数最大值

1
2
3
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

1
2
3
4
5
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
-------------本文结束感谢您的阅读-------------
0%