一、运算符的使用 以及底层补码的计算
1、int a=6--; 是否能输出a?
false 6是常数,不能自减
2、分析以下代码的运行结果
答案如下:
System.out.println(5&9);//1
/*
* 全真为真,一假全假
*
* 5 0000 0101
* 9 0000 1001
* 0000 0001
*/
System.out.println(5|9);//13
/*
* 全假为假,一真全真
*
* 5 0000 0101
* 9 0000 1001
* 0000 1101
*/
System.out.println(5^9);//12
/*
* 相同为零,不同为一
*
* 5 0000 0101
* 9 0000 1001
* 0000 1100
*/
System.out.println(~-5);//4
/*
* 按位取反(符号位也要变)
*
* 原码 1000 0101
* 反码 1111 1010
* 补码 1111 1011
* 0000 0100
*/
System.out.println(5<<2);//20
/*
* 左移 右补0
*
* 5 0000 0101
* 0001 0100
*/
System.out.println(-5<<2);//-20
/*
* 左移 右补0
*
* 5: 0000 0101
* -5: 1000 0101
* 补码 1111 1011 反码+1
* 1110 1100
* 原码 1001 0100
*/
System.out.println(-5>>2);//-2
/*
* 右移 正数 左补0
* 负数 左补1
*
* 5: 0000 0000 0000 0000 0000 0000 0000 0101
* -5: 1000 0000 0000 0000 0000 0000 0000 0101
* 补码 1111 1111 1111 1111 1111 1111 1111 1011
* 右移 1111 1111 1111 1111 1111 1111 1111 1110
* 1111 1111 1111 1111 1111 1111 1111 1101
* 原码 1000 0000 0000 0000 0000 0000 0000 0010
*/
System.out.println(-5>>>2);//1073741822
/*
* 右移 正数和负数右移之后,最左边空出的位置,都要补0
*
* 5: 0000 0000 0000 0000 0000 0000 0000 0101
* -5: 1000 0000 0000 0000 0000 0000 0000 0101
* 补码 1111 1111 1111 1111 1111 1111 1111 1011
* 右移 0011 1111 1111 1111 1111 1111 1111 1110
* 0100 0000 0000 0000 0000 0000 0000 0001 ----反码符号位不变
* 原码 0100 0000 0000 0000 0000 0000 0000 0000
*/
System.out.println(5>>2);//1
/*
* 右移 正数 左补0
* 负数 左补1
*
* 5: 0000 0000 0000 0000 0000 0000 0000 0101
* 0000 0000 0000 0000 0000 0000 0000 0001
*/
System.out.println(5>>34);//1
/*
* 右移 正数 左补0
* 负数 左补1
* 5: 0000 0000 0000 0000 0000 0000 0000 0101
* 0000 0000 0000 0000 0000 0000 0000 0001
*/
System.out.println(97=='a');
/*
* true
*/
System.out.println(5.0==5);
/*
* true
*/
System.out.println(4>5 ^ 'c'>'a');
/*
* false^true = true
*/
System.out.println((int)(char)(byte)-1);
//补=反+1
/*
* -1: 1000 0000 0000 0000 0000 0000 0000 0001
* 补码: 1111 1111 1111 1111 1111 1111 1111 1111
* byte(-1): 1111 1111
* 反码: 1111 1110
* 原码: 1000 0001 --- -1
* char(-1): 1111 1111 1111 1111 ------ 65535
* int(65535) 0000 0000 0000 0000 1111 1111 1111 1111 ---- 65535
*/
注意:
二、流程控制
1.分析以下几段代码的输出结果
(1)
答案如下:
(2)
答案如下:( 上述代码有误,修正后结果如下:)
(3)
答案如下:
(4)
答案如下: (break语句的作用是终止当前循环语句的执行,然后执行当前循环后面的语句。(break只会出现在switch和循环语句中)(跳出循环))
(5)
答案如下 :
(6)
答案如下:
(7)
答案如下:(continue语句的作用是强制循环提前返回,也就是让循环跳过本次循环中的剩余代码,然后开始下一次循环。(continue只会出现在循环语句中))
(8)
答案如下:(return语句的作用是结束当前方法的执行,并退出返回到调用该方法的语句处。(直接跳出方法))
2.编写代码实现如下效果的九九乘法表
public class Math_乘法表 {
public static void main(String[] args) {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(i + "*" + j + "=" + i * j +" ");
}
System.out.println();
}
}
}
3. 判断101-200之间有多少个素数,并输出所有素数。(只能被1和它本身整除的自然数为素数)
代码如下:
public class Math_判断素数 {
/**
* 判断101-200之间有多少个素数,并输出所有素数。(只能被1和它本身整除的自然数为素数)
*/
public static void main(String[] args) {
int count = 0;
for (int i = 101; i <= 200; i++) {//循环101~200的数字
boolean flag = true;
for (int j = 2; j < i; j++) {//注意要从j要从2开始
if (i % j == 0) {//证明j到i之间有其他数字,i能整除
flag = false;
break;//跳出当前循环
}
}
if (flag) {
System.out.println(i + "为素数");
count++;
}
}
System.out.println("素数的个数为:" + count);
}
}