二进制:由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中数据类型的分类:
基本数据类型
整数型
类型 字节数 范围
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
引用数据类型
如数组,接口,类等
注意
自动类型提升: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
位运算符是直接对二进制补码进行计算,效率高