发表于: 2017-03-16 20:18:53
1 1529
一、今天复习的东西:
/*
补充了昨天数据类型的几个问题:
A:每一个变量都必须规定数据类型;
B:java默认的整数是int类型、浮点数是double类型;
C:byte、short在进行定义的时候是赋值了int类型,再看它在不在取值范围内,不在就报错;
D:取值范围的最小数的最高位一般即时符号位也是数值位;
(今天讲的东西一定要注意,所有参与运算都是由补码进行的,需要参与运算后在转回原码进行输出!!!!)
前半天讲了java语言基础的运算符:
1、运算符:
定义:运算符是对常量和变量进行操作的符号。
分类:
算术运算符:
定义:对变量进行算术运算;
常见的算术运算符:
+、-、*、/、%、++、--;
%:结果取余;
3%4的结果为零;
++、--:对变量进行自增或自减操作;
其中又分为:
单独运算:
int a=10;
a++;(或++a)
System.out.println(a);
这个时候的自增自减在前后都是没有区别的;
多位自增自减运算:
这个时候的a++和++a是不同的;
int a=d=10;
b=a++;
c=++d;
b的输出是10;
c的输出是11;
理解为:++号在前的时候先进行自增在赋值参与运算、++号在后面的时候是对程序先赋值参与运算后在对变量自增;
2、赋值运算
定义:对变量进行赋值运算;
常见的赋值运算符:
=、+=、—=、*=、/=;
其中最常见的是=赋值;
如int x = 10;
它的意思是把10这个值赋值给一个int类型的x;
+=的意思是:左边的值和右边的值相加在赋值给左边;
int y += 10;
其它同理类推;
注意事项:
+=等的赋值运算其实已经包含一个强制转换;
面试题:
short s=1;
s = s+1;
short s=1;
s+=1;
上面两个代码有没有问题,如果有,那里有问题
上买你的第一个代码有问题:
第一个的运算是short类型其实接受的是int值,所以s+1为int值,不能直接和short值相等,会报错,因为精度丢失;
第二个代码是对的,因为她想当于:
s += 1;为short s = (short)(s+1);
4、关系运算符:(所有的比较运算和逻辑运算要用括号把它括起来方便清晰理解)
关系运算符又称为比较运算符,是对变量或常数进行比较运算;
特点:关系运算符是一个布尔类型,所以它的输出结果只有两个:true和false;
常见的比较运算符:
<,>,==,<=,>=,!=,
对上述的比较运算符进行理解后;所有的输出都为true或者false;
要注意:==和=是两种不同的运算符;
5、逻辑运算符;
定义:对变量和常量进行逻辑运算;
常见的几种逻辑运算符:
A、&与运算符(有false则false)
例如:
int a = 10;
int b = 20;
System.out.println((a>b)&(a<b));输出为false;
B:|或运算符(有true则true)
例如:
int a = 10;
int b = 20;
System.out.println((a>b)|(a<b));输出为true;
C:!非运算(结果取反)
int a = 10;
int b = 20;
System.out.println((a>b)!(a<b));输出为false;
D:^异或运算符(相同则false 不同则true)
int a = 10;
int b = 20;
System.out.println((a>b)^(a<b));输出为true;
逻辑运算是用来连接布尔表达式的,但是java中规定不能表达3<x<10的表达式,但是可以写成(x<6&x>3);
E:&&双与运算:
特点是短路效应,即左边为false就不看右边输出;(有false则短路)
例如:
int z = 10;
int x = 10;
y=(z++)<(x++)&&(++z)<(x++);
F:||双或运算和双与运算道理相同。
特点是短路效应,即左边为true就不看右边输出;(有true则短路)
6、位运算符
位运算是计算机最基本的运算;
是直接对二进制进行位运算
常见的位运算符:
&,|,!,~;
如3&4;
&与运算的特点(有0则0,同1则1);
分析:进行位运算的特点都是对二进制进行运算,则需要对进制进行转换;
转换的数为原码,二进制的原算为补码,进行转换,转换运算结果进行与位运算;
运算结果转换为原码进行输出;
实现:3的二进制是:11;
4的二进制是:100;
因为都是整数所以原、反、补都相同;
00000000 00000000 00000000 00000011
&00000000 00000000 00000000 00000100
00000000 00000000 00000000 00000000(补码)
所以结果为0;
|运算(有1则1,同0则0)
3|4;
分析:进行位运算的特点都是对二进制进行运算,则需要对进制进行转换;
转换的数为原码,二进制的原算为补码,进行转换,转换运算结果进行或位运算;
运算结果转换为原码进行输出;
实现:3的二进制是:11;
4的二进制是:100;
因为都是整数所以原、反、补都相同;
00000000 00000000 00000000 00000011
|00000000 00000000 00000000 00000100
00000000 00000000 00000000 00000111
所以输出的结果是7;
^异或运算(相同则0,不同则1);
分析:进行位运算的特点都是对二进制进行运算,则需要对进制进行转换;
转换的数为原码,二进制的原算为补码,进行转换,转换运算结果进行异或位运算;
运算结果转换为原码进行输出;
实现:3的二进制是:11;
4的二进制是:100;
因为都是整数所以原、反、补都相同;
00000000 00000000 00000000 00000011
^00000000 00000000 00000000 00000100
00000000 00000000 00000000 00000111
输出的结果是7;
~按位取反运算:(取为相反数)
00000000 00000000 00000000 00000011
^11111111 11111111 11111111 11111100(补码)补码为负数转换为原码读取数据;
反码:11111111 11111111 11111111 11111011
原码:10000000 00000000 00000000 00000100
其中补充说明了^位运算的特点:
A:异或位运算一个数据对另一个数据异或两次,他的输出是本身;
位移运算:
对一个数进行位移运算常见的位移运算有:
左移:<<
运算规则:空位补零,最高位丢弃;
如:3<<2,表示对3左移两次;
00000000 00000000 00000000 00000011
(00)000000 00000000 00000000 0000001100
快速运算得到结果是3*2^移动次幂
右移:>>
运算规则:空位补0,最高位保留
如:3>>2;表示3右移两次;
00000000 00000000 00000000 00000011
0000000000 00000000 00000000 000000(11)
快速运算规则:数/2^移动次幂
无符号位移:无论左右移动,最高位都为0;
-24>>>2;
10000000 00000000 00000000 00011000
反码:11111111 11111111 11111111 11100111
补码:0011111111 11111111 11111111 111010(00)
向右移动2位
面试题:
1、请用最有效率的方式写出计算2乘以8的结果
分析:最效率的方式计算为位运算计算,本体考察位运算是计算机最直接的计算方式,
乘为左移
实现:则2<<3;
2、请自己实现两个整数变量的交换
两个整数变量交换,有四种方法,比较简单的是使用异或位运算进行交换,不用第三个量进行参与
方法一:使用第三个变量进行储存转换
int a = 10;
int b = 20;
int c;
c=a;
a=b;
b=c;
方法二:使用异或位运算:(1、2、1,右边:a^b)
a=a^b;
b=a^b;
a=a^b;
方法三:使用算术运算进行装换;
a=a+b;
b=a-b;
a=a-b;
方法四:一句话的格式:
a=(a+b)-(b=a);
7、三目运算
三目运算是一个比较表达式进行运算,
格式为:(关系表达式)?(表达式):(表达式);
例如:
int x = 10;
int y = 20;
int z = ((x>y)?x:y);
例题:
获取两个整数中的最大值
int x = 10;
int y = 20;
int max1 = ((x>y)?x:y);
System.out.println("max:"+max);
获取三个整数中的最大值
int x = 10;
int y = 20;
int z = 30;
int pause = ((x>y)?x:y);
int max2 = (pause>z?pause:z);
比较两个整数是否相同
int x = 10;
int y = 20;
int z = ((x==y)?x:y)
8:键盘的录入:
java中变量有得时候需要人们自己去定义,所以需要使用键盘的录入功能来实现输入数据计算;
录入的步骤:
1、导入包;import java.util.Scanner;
2、创建建盘录入对象;Scanner sc = new Scanner(System.in);
3、定义键盘录入对象;int x = sc.nextInt();
9:java的结构:
java有严谨的结构按照结构来执行代码,有先后顺序等要求;
分类:A:顺序结构:
按照顺序从上彺下执行代码块;
B:选择结构:
1、if结构(if语句的表达式是布尔类型,不能为其他的类型)
if结构有三种格式;
格式1:
if(关系表达式){
语句块;
}
通常用来表达单一的选择结构;不是A就是B;
格式2:
if(关系表达式){
语句块1;
}else{
语句块2;
}
注意事项:1、if的关系表达式是布尔类型;
2、不能缺少大括号,否则语句会执行
3、一般关系表达式后不为分号,分号表示为空语句,下面的语句判断为其他语句块会继续执行
if语句与三元表达式具有一定的联系:
1、三元表达式一定能用if语句表达,反之不一定成立;
2、当if语句表达赋值类型,而不是输出,用三元表达式比较简洁;
3、三元表达式只能表示赋值,而不能输出;
格式3:
if(表达式){
语句块;
}else if(){
语句块2;
}else{
语句块3;
}
*/
二、遇到的问题:
火车晚点了- -说好的完成task1可能又要拖到明天了
三、明天计划的事情:
完成task1,然后进行task2的布置,另外根据师兄的建议会把task1的安装图多总结出来
四、收获:
补充了昨天的日报,更新了今天的日报,今天去看了一个招聘。发现自己需要掌握的还是太多,希望自己能多努力吧。
评论