No_16_0222 Java基础学习第三天
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了No_16_0222 Java基础学习第三天相关的知识,希望对你有一定的参考价值。
文档版本 | 开发工具 | 测试平台 | 工程名字 | 日期 | 作者 | 备注 |
---|---|---|---|---|---|---|
V1.0 | 2016.02.22 | lutianfei | none |
运算符
算术运算符
‘+’的用法
赋值运算符
关系运算符
逻辑运算符
位运算符
三目运算符
键盘录入数据
流程控制语句
顺序结构
选择结构
if语句第一种格式:
if语句第二种格式:
if语句第三种格式:
数据类型中补充的几个小问题
- 1、在定义Long或者Float类型变量时,要加L或F。
- 2、byte,short在定义的时候,他们接收的其实是一个int类型的值,如果值超过范围就会报错。
- 3、对于byte类型 -128 对应2进制 10000000 这里1既是符号位又是数值位
- 4、byte,short,char -> int -> long -> float -> double
- long 8 byte ,float :4byte;为什么long会转为float?
- 1、底层存储结构不同
- 2、float表示的数据范围比long的范围要大
- long: 2^63-1
- float: 3.4*10^38 >2*10^38 > 2*8^38 = 2\2^3^38 = 2*2^114 > 2^63
- long 8 byte ,float :4byte;为什么long会转为float?
5、Java中的字符char可以存储一个中文汉字,因为java语言中的字符变量占用两个byte。
6、Java语言采用的是Unicode编码。
补充float存储格式
float类型数字在计算机中用4个字节存储。遵循IEEE-754格式标准:
一个浮点数有2部分组成:底数m和指数e- 底数部分 使用二进制数来表示此浮点数的实际值
- 指数部分 占用8bit的二进制数,可表示数值范围为0-255
但是指数可正可负,所以,IEEE规定,此处算出的次方必须减去127才是真正的指数。
所以,float类型的指数可从-126到128底数部分实际是占用24bit的一个值,但是最高位始终为1,所以,最高位省去不存储,在存储中占23bit
科学计数法格式:
- SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM
- S表示浮点数正负
- E指数加上127后的值得二进制数据
- M底数
- SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM
举例:17.625在内存中的存储
- 首先要把17.625换算成二进制:10001.101
- 在将10001.101右移,直到小数点前只剩1位:1.0001101 * 2^4 因为右移动了四位
- 底数:因为小数点前必为1,所以IEEE规定只记录小数点后的就好。所以,此处的底数为:0001101
- 指数:实际为4,必须加上127(转出的时候,减去127),所以为131。也就是10000011
符号部分是整数,所以是0
综上所述,17.625在内存中的存储格式是:
01000001 10001101 00000000 00000000
运算符
- 算术运算符
- 赋值运算符
- 比较运算符
- 逻辑运算符
- 位运算符
- 三目运算符
算术运算符
注:整数相除只能得到整数,若想得到小数,只需将任意一个数据变为浮点数。
- eg:System.out.println(x*1.0/y);
++,– :放在操作数前面,先自增或者自减,然后再参与运算。
放在操作数后面,先参与运算,再自增或者自减。练习题1:
int a=10,b=10,c=10
a=b++; //a=10,b=11,c=10
c=–a; //a=9,b=11,c=9
b=++a; //a=10,b=10,c=9
a=c–; //a=9,b=10,c=8练习题2:
int x =4
int y =(x++)+(++x)+(x*10)
step1: 4+ (x = 5)
step2: 4+6(x = 6)
step3: 4+6 +(6*10)
‘+’的用法
- 加法运算符
- System.out.println(‘a’+1); 结果为:98
- 正号
- 字符串连接符
- System.out.println(“Hello” + ‘a’ +1); 结果:helloa1
- System.out.println(‘a’ + 1 + “Hello”);结果:98hello,第二个加号才是字符串连接符。
赋值运算符
符号:
- = , +=, -=, *=, /=, %=
- =为基本的赋值运算符,其他的为扩展的赋值运算符
面试题
- short s=1; s = s+1; short s=1; s+=1;
- 上面两个代码有没有问题,如果有,那里有问题
答:第一个个有问题,因素short型变量参与运算时先转换为int,可能会有精度损失。第二个没有问题,因为扩展的赋值运算符隐含了一个强制类型转换,s+=1;不是等价于s = s+1;而是等价于 s = (s的数据类型)(s+1);
\\eg: 基本运算符例子
class OperatorDemo{
public static void main(String[] args){
int x = 10;
int a,b;
a = b = 10;
System.out.println(a);
System.out.println(b);
}
}
关系运算符
- 注1:比较运算符的结果都是boolean型,也就是要么是true,要么是false。
- 注2:比较运算符“==”不能误写成“=”。(会报错:不兼容的类型)
逻辑运算符
- 逻辑运算符用于连接布尔型表达式,在Java中不可以写成3
3 & x<6 。 “&”和“&&”的区别:
- 单&时,按位与!左边无论真假,右边都进行运算;
- 双&时,逻辑与!如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
“|”和“||”的区别同理,双或时,左边为真,右边不参与运算。
异或( ^ )与或( | )的不同之处是:当左右都为true时,结果为false。
位运算符
注1: ‘~’需注意。eg:~3
- 3的原码:00000000 00000000 00000000 00000011
- ~3补码:11111111 11111111 11111111 11111100
- ~3反码:11111111 11111111 11111111 11111011
- ~3原码:10000000 00000000 00000000 00000100
- ~3 结果为-4
注2:’^’的特点:一个数据对另一个数据位异或两次,该数据不变。
eg:
class OperatorDemo{
public static void main(String[] args){
int a = 10;
int b = 20;
System.out.println(a^b^b); //10
System.out.println(a^b^a); //20
}
}
- 面试题1:请自己实现两个整数变量的交换
class OperatorTest{
public static void main(String[] args){
int a = 10;
int b = 20;
System.out.println("a:"+a+",b:"+b);
//方式1:使用第三方变量(开发中最常用的)
int c = a;
a = b;
b = c;
//方式2:用位异或实现
//结论:左边a,b,a; 右边:a^b
a = a ^ b;
b = a ^ b; // a^b^b = a
a = a ^ b; // a^a^b = b
//方式3:用变量相加的做法
a = a+b; // a= 30
b = a-b; // b= 10
a = a-b; // a= 20
方式4:一句话搞定
b = (a+b) - (a=b);
}
}
三目运算符
- 格式
- (关系表达式)?表达式1:表达式2;
- 如果条件为true,运算后的结果是表达式1;
- 如果条件为false,运算后的结果是表达式2;
示例:
- 获取两个数中大数。
- int x=3,y=4,z;
- z = (x>y)?x:y;//z变量存储的就是两个数的大数。
练习2:获取三个整数中的最大值
class OperatorTest{
public static void main(String[] args){
int a = 10;
int b = 30;
int c = 20;
int temp = (a>b)?a:b;
//System.out.println(temp);
int max =(temp > c) ? temp : c;
System.out.println("max is "+max);
//方法2:一步搞定
int max1 =(a>b) ? ((a>c) ? a : c) : ((b>c) ? b : c);
}
}
键盘录入数据
- 如何实现键盘录入数据呢?(目前先记住使用)
- 导包(位置放到class定义的上面)
- import java.util.Scanner;
- 创建对象
- Scanner sc = new Scanner(System.in);
- 接收数据
- int x = sc.nextInt();
- 导包(位置放到class定义的上面)
import java.util.Scanner;
class ScannerDemo{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个数据:");
int x = sc.nextInt();
System.out.println("你输入的数据是:"+x);
}
}
流程控制语句
- 流程控制语句分类
- 顺序结构
- 选择结构
- 循环结构
顺序结构
- 顺序结构概述
- 是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。
选择结构
- Java语言提供了两种选择结构语句
- if语句
- switch语句
if语句第一种格式:
if(关系表达式) {
语句体
}
执行流程
- 首先判断关系表达式看其结果是true还是false
- 如果是true就执行语句体
- 如果是false就不执行语句体
注意事项
- 关系表达式无论简单还是复杂,结果必须是boolean类型
- if语句控制的语句体如果是一条语句,大括号可以省略;如果是多条语句,就不能省略。建议永远不要省略。
- 一般来说:有左大括号就没有分号,有分号就没有左大括号
if语句第二种格式:
if(关系表达式) {
语句体1;
}else {
语句体2;
}
执行流程
- 首先判断关系表达式看其结果是true还是false
- 如果是true就执行语句体1
- 如果是false就执行语句体2
if的第二种格式和三元运算符之间的转换
- 三元运算符的操作都可以使用if语句改进,反之不成立
- 什么时候不成立呢?
- 当if语句控制的语句体是一条输出语句的时候,就不成立。因为三元运算符是一个运算符,必须要求有一个结果返回。而输出语句却不能作为一个返回结果。
eg:
//判断一个数据是奇数还是偶数,并输出是奇数还是偶数
if(x%2 == 0){
System.out.println("X is even");
}
else{
System.out.println("X is odd");
}
if语句第三种格式:
if(关系表达式1) {
语句体1;
}else if (关系表达式2) {
语句体2;
}
…
else {
语句体n+1;
}
- if语句的使用场景:
- A:针对表达式是一个boolean类型的判断
- B:针对一个范围的判断
以上是关于No_16_0222 Java基础学习第三天的主要内容,如果未能解决你的问题,请参考以下文章