稳稳当当学java之java程序设计基础二(3)

java程序设计基础二

1.作业回顾

public class Day051 {
	public static void main(String[] args) {
		//(1)16MB有多少字节?
		//(2)16869000字节是多少MB?
		// 1MB = 1024KB = 1024*1024B
		System.out.println(16 * 1024 * 1024); //16777216
		System.out.println(16869000 / (1024 * 1024)); //16   不是16.08是因为整型除以整型得整型
	}
}

2.二进制,bit和字节

我们通常用的数是十进制,逢十进位,数字有0123456789。计算机中采用的是二进制,逢二进位,数字有01。

十进制和二进制的对照:(8421法)

0 = 00000000 6 = 00000110

1 = 00000001 7 = 00000111

2 = 00000010 8 = 00001000

3 = 00000011 9 = 00001001

4 = 00000100 10 = 00001010

5 = 00000101

bit是二进制的一位,只有两个状态:0,1。上面的例子中的每一个二进制数都有8个bit。8个bit称为一个字节,就是 1Byte。(8b = 1B )

数据有正负,计算机不能存储符号,所以计算机使用二进制数的第一位表示正负:0代表正数,1代表负数。上面的例 子中第一位都是0,所以都是正数。

1=00000001,-1=10000001

3.八种基本数据类型

3.1整型

类型存储需求取值范围
byte1字节-128~127
short2字节-32768~32767 (3万)
int4字节-2147483648-2147483647(20亿)
long8字节-9223372036854775808~9223372036854775807
public class Day052 {
	public static void main(String[] args) {
		//byte , short , int , long
		byte b = 1; //1byte表示1字节
		
		//获取long的最大值
		System.out.println(Long.MAX_VALUE); //9223372036854775807
		//获取long的最小值
		System.out.println(Long.MIN_VALUE); //-9223372036854775808
	}
}

一个整数字面值,默认是int,如果想要表示某个整数值是long,需要在字面值的后面加上L或l。

public class Day052 {
	public static void main(String[] args) {	
		System.out.println(10); //字面值得类型为int
		System.out.println(10L); //字面值得类型为long
		
		//超出了int的取值范围,导致数据溢出
		//2147483647 = 01111111 11111111 11111111 11111111
		//-2147483648 = 10000000 00000000 00000000 00000000 
		System.out.println(2147483647 + 1); //-2147483648
		System.out.println(2147483647L + 1); //2147483648
	}
}

3.2浮点型

整型存储需求精度范围
float4字节1.4E-45~3.4028235E38
double8字节4.9E-324~1.7976931348623157E308

科学计数法

一个浮点数(小数)的字面值的默认类型是double,如果想要表示某一个小数值是float,需要在后面加上F或f 。

如果想要表示某个小数值是double,可以在值的后面加D或d,不加默认是double。

public class Day053 {
	public static void main(String[] args) {
		System.out.println(Float.MAX_VALUE); //3.4028235E38
		System.out.println(Float.MIN_VALUE); //1.4E-45
		System.out.println(Double.MAX_VALUE);//1.7976931348623157E308
		System.out.println(Double.MIN_VALUE); //4.9E-324
	}
}

3.3字符型

public class Day054 {
	public static void main(String[] args) {
		//把字符转换成数字来存储
		char c = 'a';
		System.out.println(c); //a
		System.out.println((int)c); //97
	}
}

一个字符char需要两个字节来存储。

字符必须使用单引号。

由于计算机中只能存放二进制数字,字符必须要进行编码转换为数字来存储,例如字符‘a’将被编码为数字97,字符‘A’将被编码为数字65。编码方式描述了字符和数字的对应规则。

ASCII码表,美国的标准,不能处理中文和其他国家的字符。

西欧的使用ISO-8859-1,俄罗斯使用KOI-8,中国使用GB2312和GBK,它们都是字符集。

unicode编码和utf-8

如果一份文档只有一种语言,那么没有问题。如果一份文档既有俄语又有中文,现有的字符集就无法正确处理。 因此就出现了unicode编码。unicode涵盖了目前人类使用的所有字符,并为每个字符进行统一编码。

unicode只是定义了一个庞大的,全球通用的字符集,并且为每一个字符规定了唯一确定的编号。具体存储成什么样的字节,取决于字符编码方案。

目前最为流行的unicode编码方案是UTF-8。

4.数据类型的转换

可以将一种类型的数据转换为另外一种类型的数据,这叫做数据类型转换。

类型转换分为两种:隐式类型转换和强制类型转换。

4.1隐式类型转换

小容量可以转换为大容量(系统自动完成的),byte,short,char—>int—>long—>float—>double

public class Day055 {
	public static void main(String[] args) {
		int a = 3;
		long b = a;
		double c = b;
		System.out.println(b); //3
		System.out.println(c); //3.0
	}
}

byte,short,char三者不进行运算,若运算都将升级为int再做运算。

public class Day056 {
	public static void main(String[] args) {
		byte a = 1;
		short b = 2;
		//a + b的结果是int
//		short c = (a + b); //编译错误
	}
}

boolean不与其他任意数据类型转换。

public class Day056 {
	public static void main(String[] args) {	
		int c = 1;
		boolean d = true;
		System.out.println(c + d); //编译错误
	}
}

任何数据类型与String之间使用+运算符,都将自动连接为String类型

public class Day057 {
	public static void main(String[] args) {
		int num = 10;
		String a = "我";
		String b = "岁";
		System.out.println(a + num + b); //我10岁
		System.out.println(a + num + 1 + b); //我101岁   a+num表示字符串,字符串+数字1为连接--->我101
		System.out.println(a + (num + 1) + b); //我11岁
		
		System.out.println(num + 1 + a + 1 + b); //11我1岁  num表示数字10,数字10+数字1为数字--->11
	}
}

4.2强制类型转换

大容量转小容量,需要使用强制符()

如果存储数据需要的字节不够,就会发生数据丢失。

public class Day058 {
	public static void main(String[] args) {
		//容量够,数据不丢失
		long number1 = 1689;
		//强制类型转换
		int number2 = (int) number1;
		System.out.println(number2); //1689
		
		//容量不够,数据丢失
		long number3 = 2147483648L;
		//强制类型转换
		int number4 = (int) number3;
		System.out.println(number4); //-2147483648
		
//		int x = 35.35; //编译错误
		int x = (int) 35.35; //强制类型转换
		System.out.println(x); //35
		
		int y = (int) 35.6; //强制类型转换
		System.out.println(y); //35  不是四舍五入,而是丢弃小数部分		
	}
}

5.算数运算符

包括加减乘除,+ - * /

public class Day059 {
	public static void main(String[] args) {
		int a = 5;
		a += 5; //a = a + 5;
		System.out.println(a); //10
		a *= 10; //a = a * 10;
		System.out.println(a); //100
		a -= 5; // a = a - 5;
		System.out.println(a); //95
		a /= 5; //a = a / 5;
		System.out.println(a); //19
		
		//取模(求余数)%
		System.out.println(10 % 4); //2
		System.out.println(15 % 4); //3
		
		//+作为单目运算时表示正数
		int b = +2; //int b = 2;
		System.out.println(b); //2
		//-作为单目运算时表示负数
		int c = -2; 
		System.out.println(c); //-2	
	}
}

6.自增自减运算符

public class Day0510 {
	public static void main(String[] args) {
		int x = 3;
		x++; //x = x + 1;
		System.out.println(x); //4
		x--; //x = x - 1;
		System.out.println(x); //3
		
		//++在前,变量先自增,然后再参与其他运算
		int a = 3;
		int b = ++a; //相当于a++; int b = a;
		System.out.println(b); //4
		
		//++在前,变量先自增,然后再参与其他运算
		int c = 3;
		int d = c++; //相当于int d = c; c++; 
		System.out.println(d); //3
		System.out.println(c); //4
		
		//--类似
	}
}

7.比较运算符

比较运算符的结果为boolean类型的值(true,false)

判断相等使用==,注意与赋值运算符=的区别

比较运算符:大于(>),小于(<),大于等于(>=),小于等于(<=),不等于(!=),等于(==)

public class Day0511 {
	public static void main(String[] args) {
		//==表示判断是否相等
		System.out.println(1 == 2); // false
		System.out.println(2 == 2); // true
		int a = 1;
		int b = 1;
		//先执行a == b,然后将结果赋值给c
		boolean c = a == b; 
		System.out.println(c); //true
		
		System.out.println(1 > 2); //false
		System.out.println(1 < 2); //true
		System.out.println(1 >= 1); //true
		System.out.println(2 >= 1); //true
		System.out.println(1 != 2); //true
	}
}

8.逻辑运算符

逻辑运算符两边的数据都是boolean类型的,结果也是boolean类型的。

public class Day0512 {
	public static void main(String[] args) {
		//短路与操作符&&,只有两边都是true时,结果才是true,可以理解为并且(and)
		System.out.println(true && true); //true
		System.out.println(true && false); //false
		System.out.println(false && true); //false
		System.out.println(false && false); //false
		
		System.out.println("**************");
		
		//短路或操作符||,只要一边为true,结果就是true
		System.out.println(true || true); //true
		System.out.println(true || false); //true
		System.out.println(false || true); //true
		System.out.println(false || false); //false
		
		//短路是指,当结果已经明确了,就不必往下执行了
		//对于&&来说,当第一个表达式的结果为false,整个结果就是false,第二个表达式就不执行了。
		//对于||来说,当第一个表达式的结果为true,整个结果就是true,第二个表达式就不执行了。
		int i = 10;
		System.out.println(true || ++i == 11); //true
		System.out.println(false && ++i == 11); //false
		System.out.println(i); //10, 两个++i都没有执行
		
		//&和|跟&&和||类似,只不过不是短路的
		int j = 10;
		System.out.println(true | ++j == 11); //true
		System.out.println(false & ++j == 11); //false
		System.out.println(j); //12
		
		//尽量使用短路的,提高效率
		
		//异或^,当两边结果不同时,为true,相同时为false
		System.out.println(true ^ true); //false
		System.out.println(true ^ false); //true
		System.out.println(false ^ true); //true
		System.out.println(false ^ false); //false
		
		//非!,取反
		System.out.println(!false); //true
		System.out.println(!true); //false	
	}
}

9.三目运算符

public class Day0513 {
	public static void main(String[] args) {
		int age = 18;
		//表达式为true,取:之前的,否则取:之后的
		System.out.println(age >= 18 ? "成年了" : "未成年");
		
		//表达式为true,取:之前的,否则取:之后的
		String str = age >= 18 ? "成年了" : "未成年";
		System.out.println(str);
	}
}

10.练习

1,将分钟数转换为小时和分钟。(1000分钟是多少小时,剩下多少分钟)

2,根据半径计算圆的周长和面积(半径是5的圆,输出周长和面积)

3,找出两个数中的最大值(int a = 3, int b = 4,输出最大值)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十年之伴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值