发表于: 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的安装图多总结出来

四、收获:

补充了昨天的日报,更新了今天的日报,今天去看了一个招聘。发现自己需要掌握的还是太多,希望自己能多努力吧。


返回列表 返回列表
评论

    分享到