当前位置: 代码迷 >> 综合 >> coreJava基础篇-关于表达式和流程控制的一些笔试题和练习
  详细解决方案

coreJava基础篇-关于表达式和流程控制的一些笔试题和练习

热度:5   发布时间:2024-02-22 00:01:03.0

目录

 

1.赋值操作符

2.算数操作符

3.位移操作符

4.位运算符

5.逻辑运算符/短路运算符

6.条件运算符/三目运算符

7.++运算和--运算

7.使用switch的注意事项

8.while和do-while的区别


1.赋值操作符

【笔试题】下列代码哪个能够通过编译?哪个会报错?

1)short s = 10;s = s + 1;2)short s = 10;s += 1;

第二个能通过编译

1是int类型,而s是short类型,进行加法运算,系统底层会自动给我们提升为int类型,而左边的s是short类型,不能进行赋值

而运算赋值符会在运算的时候,自动兼容数据类型

 

2.算数操作符

【笔试题】写出下列代码输出的结果:

int a = 10;float f = 12.5f;System.out.println("计算结果为:" +  a+f); 

计算结果为:1012.5

println()的参数列表中,有三个操作数需要使用“+”运算进行计算

而“+”不管是做字符串的拼接,还是算数运算,都没有优先级之分,都是从左往右依次计算的

3.位移操作符

>> 有符号右移/算数右移

规则:低位丢弃,高位补符号位。

练习:写出下列代码运行的结果:

System.out.println(10 >> 2); System.out.println(-10 >> 2); 

10>>2

10的二进制原码:00001010

右移2位:00000010                     =2

-10>>2

注:负数进行位操作都是按补码进行的

-10的补码:11110110

右移2位: 11111101

-1取反码:11111100

取反取补码:10000011               =-3

>>> 无符号右移/逻辑右移

规则:低位丢弃,高位直接补零。

练习:写出下列代码运行的结果:

System.out.println(-10 >>> 2);  

-10的补码:11111111 11111111 11111111 10001011   

右移两位: 00111111 11111111 11111111 11111101         =1073741821

 

<<左移

规则:高位丢弃,低位补0。

练习:写出下列代码运行的结果:

System.out.println(10 << 2);  // 00101000 -> 40 System.out.println(25 << 2);  // 01100100 -> 100System.out.println(30 << 4);  // 480

 

4.位运算符

位运算符是基于二进制位进行运算的。

& 与运算

规则:同真则真,有假则假。

练习:写出下列代码运行的结果:

System.out.println(10 & 3); // 2System.out.println(25 & -14); // 16

 

| 或运算

规则:有真则真,同假才假。

^ 异或运算

规则:相同则为0,不同则为1

~非运算/取反运算

规则:按位取反。

注意,“~“属于单目运算符,只有一个操作数。

练习:写出下列代码运行的结果:

System.out.println(~31);  // -32

5.逻辑运算符/短路运算符

逻辑运算符具有短路功能

练习:写出下列代码运行的结果:

int a = 10;
int b = 20;
System.out.println(a > 10 && b + 10 > 10);
System.out.println(b + 10 > a || a >= b);

在使用逻辑运算符时,要注意优先级问题。

练习:结果输出什么内容?

int a = 20;
int b = 10;
boolean result = a >= 20 || a >= b && a + b > 30;
System.out.println(result); 

如果按左到右的顺序运算,结果会是false,但是正确结果为true

是因为&&的优先级高于|| 

 

6.条件运算符/三目运算符

练习:写出下列代码运行的结果:

int number = -10;
String result = number > 0 ? "正数" : (number < 0 ? "负数" : "为零");
System.out.println(result);

负数

7.++运算和--运算

注:变量++ :代表先使用变量的当前值,用完之后让它自加

 ++变量:代表先令其自加,再使用自加之后的值

int i = 6;
int j = 10;
if (i++ >= 7 && j-- <= 10) {System.out.println("hello");
}
System.out.println(i);
System.out.println(j);
/** 1、控制台输出的结果是什么?** 2、如果把i++换成++i,则输出结果为?* * 3、在第二问的基础上,把第二个判断条件改为--j>=10,输出结果是什么?

1. 7  10

i++是先赋值的,所以i++=6,6>=7显然不成立,因为逻辑运算符有短路功能,所以后边的j就没有进行自减

所以输出i等于7,j等于10

2.hello  7 9

3.7,9

--j先自减再赋值,--j=9,所以--j>=10显然是错误的,不会输出hello,但i和j都已经参与过自增和自减

所以输出i等于7,j=9

7.使用switch的注意事项

switch并不是适用于所有的数据类型

只支持byte、short、char、int 

在JDK1.5版本之后添加了enum枚举类型

JDK1.7之后,添加了String类型

case之后只能声明常量和字面量,不能使用常量

通常情况下,应该在每一个case后件都加break,否则可能执行多个case中的代码

case和default是平级的

switch判断需要两个阶段:1.找case2.找default

不管在哪个阶段,找到起点就会开始向下运行,无论下边是case还是default,要运行到第一个break关键字出现或者全部执行完毕才会结束

什么时候执行default中代码?

任何一个case都不满足,就会开始从default处向下执行,直到遇到break结束

有满足的case,但是没有break,而default又在case后边

 

8.while和do-while的区别

while是先判断,再执行。

do-while先执行,再判断。

也就意味着,while循环有可能一次都不执行直接跳过(第一次判断循环条件就不满足)。

但是do-while循环最少也会执行一次。

如果do-while和while都能至少执行一次的话,其实没有太大区别。

只有一种情况特殊,就是判断条件直接不符合。

 

【笔试题】

int i = 0;
int j = 1;
do {i++;j=++i;
} while (i <= 6)
System.out.println(i);
System.out.println(j);
A、0   1
B、5   6
C、编译报错
D、7   8

D