java基础-进制、数据类型、运算符

进制

二进制:0~1,满二进一,0b00011,0b10011,在JDK1.7之前程序中无法直接书写一个二进制数字,JDK1.7之后要求是以0b开头作为标识

八进制:0~7,满八进一,07,015,要求以0开头作为标识

十进制:0~9,满十进一

十六进制:0~9,A~F,满十六进一,0x20,0xA要求以0x开头作为标识,F+1 =10

进制之间的转换

十进制转换成二进制:不断除以2取余,然后将余数倒排

二进制转换成十进制:从低位次起,按位次乘以2的位次次幂,然后求和。

十进制向那个进制转换就除以那个进制,然后取余倒排

二进制向八进制转换:从低位次起,每三位化为一组,产生一位八进制数字,最高位不足三位,补0,三位以内,按照二进制向十进制的转化规则进行运算,产生的八进制数字按顺序排列---三变一

八进制转换成二进制:一变三的过程--每一位八进制转换成三位二进制数字,然后将这些二进制数字按顺序排列

二进制转换成十六进制:四变一的过程---类比二进制转换成八进制

变量

public class A{

public static void main(String[] a){

//变量必须先声明再使用

i = 5;

int i;

}

//变量在哪儿定义在哪儿使用

i = 10;

}

扩展:1byte=8bit  1B = 8b, 1KB=1024B MB, GB,TB,PB

数据类型:基本数据类型、引用数据类型

整型

byte---字节型---1个字节--8位-- -2^7 ~ 2^7-1--- -128~127

byte b = -128;

默认值是0

short---短整型---2个字节--- -2^15 ~ 2^15-1 --- -32768~32767

默认值是0
int---整型---4个字节--- -2^31 ~2^31-1

int i = 0b0011;

int i = 0x23;
//从JDK1.7开始,允许数字中间插入_分隔数字,在编译的时候,会自动省略_

int i = 100_000_000;

Java中整数默认就是int类型

默认值是0

long---长整型---8个字节

long l = 4L;

默认值是0L

浮点型

float---单精度---4个字节---8位存储整数,23位存储小数,1位存储小数点。float类型的变量的值后边必须加上F标识。---在java中用的比较少。

float f = 3.2f;

默认值是0.0f

double---双精度---8个字节---11位存储整数,1位存储小数点,52位存储小数。

Java中的小数默认就是double类型

double d = 4.5;

double d = 3.8D;

double d = 3e4;-> double d = 30000.0;

double d = 3p2;---十六进制的科学计数法的表示形式

默认值是0.0

字符型---char---2个字节--- 0-65535

编码:阿斯科玛表---ASCII 0-127  西欧码表---ISO8859-1 0-255  GB2312---2个字节表示一个汉字  ---GBK  Unicode编码体系---UTF-8---3个字节表示一个字符---万国码表

char c = ‘f’;

char c = ‘中';

\t  制表符  \r 回车  \n 换行 \\ 反斜杠  \’单引号  \”双引号

默认值: ‘\u0000’---以\u开头表示这个字符是它对应的UTF-8的编码

布尔型---boolean---大小根据操作系统和JDK版本不同而定---true/false

默认值:false

引用数据类型

类---class 接口---interface 数组---[]

数据类型的转换   

隐式转换/自动类型转换

byte b = 3;

int i = b;

转换规律一:byte->short->int->long

long l = 34;//34默认是int类型,int类型的值可以赋值给long类型---在int类型的而取值范围内,将值直接赋值给long类型,可以不加L

float f = 3.2f;

double d = f;

转换规律二:float->double

int i = 3;

float f = i;

转换规律三:int->float,可能会产生精度损失

float f = -25;//true

float f = 25.0;//false

long l = 34;

float f = l ;---->true

转换规律四:任何一个整型都可以赋值给浮点型的变量,但是可能产生精度损失

int->double--->会产生精度损失

char c = ‘e’;

int i = c;

转换规律五:char -> int

//这两种写法在编译时期就已经转换成了对应的形式了

char c = 98;--true--> char c = ‘b’;

short s = ‘b’;--true---> short s = 98;

char c = -1; //编译报错

//分开编译的,编译完了char c = ‘b’; ‘b’已经以字符形式存在了内存中

//由于两句话是分开编译的,所以现在JVM已经不确定c变量所表示表示的字符是否在short类型的取值范围内了。

char c = ‘b’;

short s = c;--false

//编译完成之后s的取值已经存入内存中了,再次使用s的时候,不能按照对应的码表转换成字符,能确定这个数字是否在码表的范围内吗?

short s = 100;

char c = s;

因为两句话是分开编译的,所以无法确定范围。

各个基本类型之间是平等的,不存在大小或者说是父子关系。

显示转换/强制类型转换

int i = 5;

byte b = (byte)i;

当把大的类型转换为小的类型的时候,需要强制转换

float f = 3;->3.0f

int i = (int)f;

double d = 3.8;

int i = (int)d;-> i = 3;

当把浮点型数据转换为整型变量的时候,需要强制类型的转换。小数转换成整数的时候,不是四舍五入,而是舍弃掉小数部分。因此,小数转换整数的时候,也会产生精度损失。

运算符

算术运算符

+加 -减 *乘 /除 %取模 ++自增 --自减 +字符串拼接运算

1. 两个int类型运算完后之后,结果一定是int类型

2. byte和short类型在进行运算的时候,底层会自动提升为int类型,然后进行计算

3. 对于byte b = 3 + 4; JVM在编译的时候会进行优化,编译完成之后,实际上这句话就已经成了byte b = 7;  

% 取模--取余

103%3 = 1  2%5 = 2  4%2=0

-5%3=-2  -1% 3=-1

5%-3=2  1%-3=1

-5%-3=-2

对于负数的取余,先按照正数的取余运算,运算完成之后看%左边的数字的符号,如果左边的数是正数,结果就是正数,如果左边的数字是负数,结果是就是负数。

3.2%2=1.2  3%1.2=0.6  -3.5 % 1.7=-0.1

++ 自增

相当于在原来的基础上加了1 ->i = i + 1;

只有自增运算的时候,++在前在后结果一样。

++在前,这个变量是先自增,然后再参与其他的运算 int i = 5; int j = ++i;--> i = j = 6;

++在后,先进行其他运算,然后这个变量再自增  int i = 5; int j = i++; i=6;j = 5;

int i = 5;

int j = i++ + ++i; j=12

int j = ++i + i++;  j=12

byte类型的数据可以进行自增运算吗?

byte b = 3;

b++;---可以

在运算完成之后,Java在底层会对结果做一次强制类型的转换,原来是byte类型就再转换会byte类型

byte b = 127;

b++;

+ 字符串拼接运算

“a” + “b” -> “ab”

Stringbuilder sb = new StringBuilder(“a”);sb.append(“b”);->sb.toString();new String(“ab”);

2 + “a” -> “2a”

 2 + 3 + “a” -> “5a”

2 + ‘a’ -> 99

“a” + 2 + 3 -> “a23”

“a” + true-> “atrue”

赋值运算符

= += -= *= /= %= &= |= ^=

=进行赋值运算

int i = 5;

i += 2; -> i = i + 2;

byte b = 25;

b += 5;---> 可以

除了=以外的赋值运算符,在使用之前,这个变量必须有初始值

比较/关系运算符

==等于  !=不等于 > < >= <= instanceof

3 != 4--> true

3 > 4-> false

instanceof 用来判断对象与类的关系的

逻辑运算符

&And 与  | OR 或 !NOT非 ^异或  &&短路与 ||短路或

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

true|true=true true|false=true false|true=true fasle=false=false

!true=false !false=true

true^true=false true^false=true false^true=true false^false=false

&&短路与,运算规则和&完全一样,但是&&有短路特性,如果&&之前的运算结果确定为false,那么&&之后的运算就不再进行了。

位运算符

&与 |或 ^异或 <<左移 >>右移 >>>无符号右移 ~取反

注意:位运算是针对整数进行运算的

3 & 4

交换值的方式

方式一:

int i = 3,j = 4;

int temp = i;

i = j;

j = temp;

方式二:

int i = 3, j = 4;

i = i + j;

j = i - j; -> j = i + j - j-> j = i;

i = i - j;-> i = i + j - i-> i = j;

i += j; j = i - j;i-=j;

方式三:

int i = 3, j = 4;

i = i ^ j;

j = i ^ j;  -> j = i ^ j ^ j-> j = i

i = i ^ j; -> i = i ^ j ^ i-> i =j;

i^=j; j^=i; i^=j;

 

猜你喜欢

转载自blog.csdn.net/weixin_40243894/article/details/82050501