进制转换
1.遇几进一就是几进制;
2.常见的有:十六进制,十进制,八进制,二进制,计算机能够识别的是二进制
3.八进制和十六进制是为了更好地表示二进制
计算机的存储单位
1 Byte = 8 bit
1kB = 1024B
1MB = 1024GB
1TB = 1024GB
1PB = 1024TB
虽然最小的是bit,但是我们一般常说的最小单位是Byte(字节)
数据类型
简单数据类型
数值型
名称 | 占用内存 | 表示大小 |
---|---|---|
byte | 一个字节 | [-27,27-1] |
short | 两个字节 | [-215,215-1] |
int | 四个字节 | [-231,231-1] |
long | 八个字节 | [-263,263-1] |
浮点型:小数
名称 | 占用内存 | 表示大小 |
---|---|---|
float单精度 | 四个字节 | 采用科学计数法:3.4E38 |
double:双精度 | 八个字节 | 采用科学计数法:1.4E308 |
布尔类型
名称 | 占用内存 | 表示大小 |
---|---|---|
boolean | 一个字节 | 只有两个:true(真)和false(假) |
char
常规理解是一个字节----根据ASCII
常用字符集:1.ASCII,美国–2.GBK/GB2312,中国–3.IS08859,欧洲
4.UTF-8,国际通用–5.unicode,计算机内部标准
编码:将字符转换成二进制
解码:将二进制转回字符
乱码:编码和解码使用的字符集不同导致的
public static void main (String[] args) {
//数值型
/*
* 区分赋值和初始化,单独赋值
* 赋值:一般是在定义好一个变量后,单独赋值
* 初始化:一定是在定义变量的同时完成赋值
*/
byte a = 12;//定义一个Byte型的变量a并初始化成12
a = 14;//赋值
System.out.println("a:"+a);//+号的作用:1.运算 2.当使用字符串与其他的数据类型变量进行相加时,+的功能是拼接
short b = 23;
int c = 32;
//浮点型
//求float型,double的最大值
System.out.println(Float.MAX_VALUE);//float最大值3.4028235E38
System.out.println(Double.MAX_VALUE);//double最大值1.7976931348623157E308
float d = 3.4f;//默认将小数认为是double型,如果要表示是float型在后面加f
double e = 4.5;
//布尔型
boolean f = true;
//字符型
char g = 'a';
System.out.println((int)g);
}
引用数据类型
数组等一些指向性的数据类型,暂时不讲
类型转换
根据等级的高低从低到高:byte,char,short,int,long,float,double
强制类型转换:从高类型转换到低类型—可能造成数据损失
自动类型转换:从低类型转成高类型----不会有数据损失
public static void main(String[] args) {
//自动类型转换
byte a = 12;
short b = a;
System.out.println("a:"+a+" b:"+b );
//强制类型转换
short c = 256;//00000001 00000000
byte d = (byte)c; // 00000000造成数据丢失
System.out.println("d:"+d);
//实例,
int e = 128;
byte f = (byte)e;
System.out.println(f);//-128
//数字默认是int型的
byte num = 4;
num = (byte)(num + 3);
}
运算符:
从功能分
名称 | 例子 |
---|---|
算数运算符 | ± * / 自增:++ 自减:— |
.赋值运算符 | *= /= += -= |
关系运算符 | < > <= >= 不等于!= 等于== |
逻辑运算符 | &&{与} ||(或) !(非) |
位运算符 | 直接操作二进制的位 ~(取反) ^(按位异或) &(按位与) |(按位或) |
移位运算符 | 直接操作二进制的位 >>1 右移一位代表除以2,<<1左移一位,代表乘二 |
从操作的元素区分
名称 | 例子 |
---|---|
1.一元运算符 | ++ – +(正) -(负) ! ~ |
2.二元运算符 | |
3.三元运算符 | ?: 三目运算符 |
public static void main (String[] args) {
System.out.println(3+4);
System.out.println(3*2);//遵守普通的运算规则
System.out.println(-3/2);//遵守普通的运算规则,只适用于整数
System.out.println(-3%-2);//取余数时,余数的符号与被除数符号相同
//++(自增) --(自减);每次都会自动加一或者减一
//主要研究++
//两种情况
//++在前:变量会首先自身加一,在使用加一后的至参与整体运算
//++在后:变量首先参与整体的运算,然后在自身加一
int a = 2,b,c = 3,d;
b = a++;//++在后 b = 2 a = 3
d = ++c;//++在前 c = 4 d = 4
// * 2.赋值运算符 = *= /= += -=
//都是将右边的值赋值给左边
int f = 4;
//定义的变量一定要先给值,在参与运算
f += 3;//f = f + 3;
/*
* 练习一:
*/
int n = 2,m = 3, u = 1, o = 0;
o = n++ - --m + (u++ - n--);
System.out.println(n+" "+m+" "+u+ " "+o);
/*
* 实例分析:先考虑优先级,优先级相同在考虑结合性,先考虑优先级低的,使用排除法将优先极高的找出来,在一步步运算
* 1.先考虑等号,在使用排除法,根据右结合律,先算=的右边
* 2.在考虑()外的+ -,根据左结合性
* 3.先算n++ n=3 n++=2
* 4.算--m m=2 --m=2
* 5.算()(1-3) u=2 n=2
* 6.算2中的-+ 2-2+(1-3)=2
* 7.算= 将值赋给o=-2
*/
// * 3.关系运算符 < > <= >= !+ ==
//关系运算符的结果只有俩,true和false
System.out.println(3<4);//true
System.out.println(3==4);//false
// * 4逻辑运算符 &&{逻辑与} ||(逻辑或) !(非)
//注意点:结果只有true和false;参与运算的元素也只能是true和false;
/*
* &&:全真则真,一假则假
* ||:全假则假,一真则真
* !:真则假,假则真,
*/
System.out.println(false&&true);//false
System.out.println(true&&true);//true
System.out.println(false||true);//true
System.out.println(!false);//true
System.out.println(3>4 && 5<3);//false
System.out.println("aaaaaaaaaaaaaaaaaaa");
a = 2;
System.out.println(a < 3 || a++ > 4);
System.out.println(a);
/*
* 短路与:当有多个与相连时,从左往右,只要有一个false,就会停止运算,整个结果就是false
* 短路或:当有多个与相连时,从左往右,只要有一个true,就会停止运算,整个结果就是true
* 所谓停止运算,就是代码不再执行,但是如果后面又有其他逻辑运算符,将前面连续的只算出后,还要进行当前运算符的运算。
*/
System.out.println(false&&true&&true&&true);
int bb = 2,cc = 3;
boolean isture = 3<1 && 4>3 && bb++ >1 && 2<4 || cc++<6;
System.out.println(isture+"bb"+bb+"cc"+cc);
// * 5.位运算符 直接操作二进制的位 ~(按位取反) ^ (按位异或) &(按位与) |(按位或)
/*
* ~(按位取反):1就是0,0就是1;
* ^ (按位异或):参与运算的当前位,相同则是0,不同则是1
* &(按位与):全1则1 ,有0则0
* |(按位或):全0则0,有1则1
*/
/*
* 实例:11和7
* 1011 11
* 0111 7
*
* 0011 &
* 1111 |
* 1100 ^
*
* 按位取反
* 1011 11
* 0100 7 ~
*/
//实现两个数的交换 x = 3 ,y = 3
int x = 3,y = 4,temp = 0;
temp = x;
x = y;
y = temp;
//上面的弊端:要借助于三方的变量
//第二种方法:使用^,
x = x ^ y;
y = x ^ y;
x = x ^ y;
System.out.println("x:"+x+" y:"+y);
/*
* 为什么要使用位运算符进行运算?
* 因为位运算符直接操作的是二进制,运算的效率高,速度快。
*/
// * 6.移位运算符 直接操作二进制的位 >>1 右移一位代表除以2,<<1左移一位,代表乘二}
//注意:先右移后左移不一定得到原来的数,先左移后右移也不一定得到原来的数, >>>无符号右移一位
int z = 5>>1;//0101 右移一位 0010
System.out.println(z);//2
z = z<<1;//0010 左移一位 0100
System.out.println(z);//4
// * b:从运算操作的元素来区分
// * 3.三元运算符:?: 三目运算符
//表达式:由变量,常量以及运算符组成的式子
//语句:表达式+; 空语句:;
//?: 三目运算符
//组成:表达式1>表达式2?值1:值2
//解释:当表达式1>表达式2时,结果就是1,不然结果是2
int r = 4,i = 5;
int q = r>i?r:i;
System.out.println(q);
}