thinking in java test4.3练习(1)(2)(3)(4)(5)用三元操作符和按位操作来显示二进制
2016-08-09 20:47
591 查看
题目(1):写一个程序,打印从1到100的值。
代码如下:
这是简单的循环应用,当然除了用for循环,我们也可以用while和do…while。如下所示:
练习(2)题目:写一个程序,产生25个int类型的随机数,对于每一个随机值,使用if—else语句来将起分类为大于,小于或者等于紧随着它而随机生成的值。
代码如下:
控制台输出如下:
当前数:591是小于随它而产生的随机数的
当前数:765是小于随它而产生的随机数的
当前数:835是大于紧随它而产生的随机数的
当前数:385是小于随它而产生的随机数的
当前数:906是小于随它而产生的随机数的
当前数:977是大于紧随它而产生的随机数的
当前数:850是大于紧随它而产生的随机数的
当前数:116是小于随它而产生的随机数的
当前数:710是大于紧随它而产生的随机数的
当前数:684是大于紧随它而产生的随机数的
当前数:137是小于随它而产生的随机数的
当前数:254是小于随它而产生的随机数的
当前数:954是大于紧随它而产生的随机数的
当前数:139是大于紧随它而产生的随机数的
当前数:124是小于随它而产生的随机数的
当前数:751是大于紧随它而产生的随机数的
当前数:523是大于紧随它而产生的随机数的
当前数:15是小于随它而产生的随机数的
当前数:454是小于随它而产生的随机数的
当前数:476是小于随它而产生的随机数的
当前数:885是大于紧随它而产生的随机数的
当前数:84是小于随它而产生的随机数的
当前数:331是小于随它而产生的随机数的
当前数:700是大于紧随它而产生的随机数的
当前数:113是小于随它而产生的随机数的
练习(3)题目:修改练习(2),把代码用一个while无限循环包括起来。然后运行它直至用键盘中断其运行,通常是通过按Ctlr+C。
题目的意思就是让我们写个while死循环。
代码很简单,就是将for循环语句该成:while(true);
其实用for语句也能写死循环:for( ; ; );如上所示for语句内不写任何语句,当然不能省略分号,这也是一个死循环。
练习(4)题目:写一个程序,使用两个嵌套的for循环和取余操作符(%)来探测和打印素数(只能被其自身和1整除,而不能被其他数字整除的整数)。代码如下:
练习(5)题目:重复第三章中的练习10,不要用Integer.toBinaryString()方法,而是用三元操作符和按位操作符来显示二进制0和1.
源代码如下:
控制台输出为:
0000000000000000
1111111111111111
0101010101010101
1111111111111111
根据题目的要求,用按位和移位运算符显示二进制。思路为:
1,输入一个二进制为1000 0000 0000 0000的数d
2,d与c进行或运算,因为1|1=1,1|0=1,0|0=0;所以如果c的二进制从左往右数第一个,(也就是d的二进制数值为1的相对应位置),为0,则c|d不等于c,(因为d其它位置二进制值为0,所以对计算结果没有影响),如果结果为1,则说明c|d==c。根据此,得出c的二进制值第一个位置是0还是1。用三元运算符复制给out,再在控制台输出。
3,对d进行无符号移位操做,d的二进制值为1的位置右移一位,然后再与c进行或运算,根据运算结果得出c二进制表示时从左往右第二个值为1还是0,再输出。
4,接下来不断重复移位和计算,直到得到所有结果位置。
将以上步骤封装成一个方法,分别输出与,或,非,异或四种位操作的结果,与第三章练习10运算结果对比后发现结果完全正确。
以上。
代码如下:
public class Test4_3_1 { public static void main(String[] args){ for (int i = 0; i <= 100; i++) { System.out.println(i); } } }
这是简单的循环应用,当然除了用for循环,我们也可以用while和do…while。如下所示:
int i = 0; while (i <= 100) { System.out.println(i++); } int j = 0; do { System.out.println(j++); }while (j<=100);
练习(2)题目:写一个程序,产生25个int类型的随机数,对于每一个随机值,使用if—else语句来将起分类为大于,小于或者等于紧随着它而随机生成的值。
代码如下:
public class Test4_3_2 { public static void main(String[] args) { int thisNum ; int nextNum = (int) (Math.random()*1000);//初始化 for (int i = 0; i < 25; i++) { thisNum = nextNum; nextNum = (int) (Math.random() * 1000); if (thisNum > nextNum) { System.out.println("当前数:" + thisNum + "是大于紧随它而产生的随机数的"); } else if (thisNum < nextNum) { System.out.println("当前数:" + thisNum + "是小于随它而产生的随机数的"); } else { System.out.println("当前数:" + thisNum + "是等于紧随它而产生的随机数的"); } } } }
控制台输出如下:
当前数:591是小于随它而产生的随机数的
当前数:765是小于随它而产生的随机数的
当前数:835是大于紧随它而产生的随机数的
当前数:385是小于随它而产生的随机数的
当前数:906是小于随它而产生的随机数的
当前数:977是大于紧随它而产生的随机数的
当前数:850是大于紧随它而产生的随机数的
当前数:116是小于随它而产生的随机数的
当前数:710是大于紧随它而产生的随机数的
当前数:684是大于紧随它而产生的随机数的
当前数:137是小于随它而产生的随机数的
当前数:254是小于随它而产生的随机数的
当前数:954是大于紧随它而产生的随机数的
当前数:139是大于紧随它而产生的随机数的
当前数:124是小于随它而产生的随机数的
当前数:751是大于紧随它而产生的随机数的
当前数:523是大于紧随它而产生的随机数的
当前数:15是小于随它而产生的随机数的
当前数:454是小于随它而产生的随机数的
当前数:476是小于随它而产生的随机数的
当前数:885是大于紧随它而产生的随机数的
当前数:84是小于随它而产生的随机数的
当前数:331是小于随它而产生的随机数的
当前数:700是大于紧随它而产生的随机数的
当前数:113是小于随它而产生的随机数的
练习(3)题目:修改练习(2),把代码用一个while无限循环包括起来。然后运行它直至用键盘中断其运行,通常是通过按Ctlr+C。
题目的意思就是让我们写个while死循环。
代码很简单,就是将for循环语句该成:while(true);
其实用for语句也能写死循环:for( ; ; );如上所示for语句内不写任何语句,当然不能省略分号,这也是一个死循环。
练习(4)题目:写一个程序,使用两个嵌套的for循环和取余操作符(%)来探测和打印素数(只能被其自身和1整除,而不能被其他数字整除的整数)。代码如下:
public static void main(String[] args) { for (int i = 1; i < 1002; i++) { int num = 0; for (int j = 1; j < (i + 2) / 2; j++) { if ((i % j) == 0) { num++;//记录是否出现能被整除的数 } } if (num < 2) {//被1整除计一次 System.out.println("数字:" + i + " 是素数"); } } }
练习(5)题目:重复第三章中的练习10,不要用Integer.toBinaryString()方法,而是用三元操作符和按位操作符来显示二进制0和1.
源代码如下:
public static void main(String[] args){ int a = 0xAAAA; int b = 0x5555; int c; c = a & b; outCBit(c); c = a | b; outCBit(c); c = ~a; outCBit(c); c = a ^ b; outCBit(c); } private < 4000 span class="hljs-keyword">static void outCBit(int c) { int d = 0x8000; for (int i = 0; i < 16; i++) { int out = (c | d) == c ? 1 : 0;//循环比较得出每一位 System.out.print(out); d>>>=1; } System.out.println(); }
控制台输出为:
0000000000000000
1111111111111111
0101010101010101
1111111111111111
根据题目的要求,用按位和移位运算符显示二进制。思路为:
1,输入一个二进制为1000 0000 0000 0000的数d
2,d与c进行或运算,因为1|1=1,1|0=1,0|0=0;所以如果c的二进制从左往右数第一个,(也就是d的二进制数值为1的相对应位置),为0,则c|d不等于c,(因为d其它位置二进制值为0,所以对计算结果没有影响),如果结果为1,则说明c|d==c。根据此,得出c的二进制值第一个位置是0还是1。用三元运算符复制给out,再在控制台输出。
3,对d进行无符号移位操做,d的二进制值为1的位置右移一位,然后再与c进行或运算,根据运算结果得出c二进制表示时从左往右第二个值为1还是0,再输出。
4,接下来不断重复移位和计算,直到得到所有结果位置。
将以上步骤封装成一个方法,分别输出与,或,非,异或四种位操作的结果,与第三章练习10运算结果对比后发现结果完全正确。
以上。
相关文章推荐
- thinking in java test5.3练习(3)(4)(5)(6)(7)
- thinking in java test练习(13)(14)
- thinking in java test3.17练习(14)
- thinking in java test3.4练习(2)(3)别名机制
- thinking in java test5.5练习(10)(11)(12)finalize()方法
- thinking in java test3.10练习(10)按位运算
- thinking in java test3.11练习(11)(12)(13)
- thinking in java test练习(12)(13)javadoc的生成
- thinking in java test2.11练习(9)之java装箱拆箱
- thinking in java test5.8练习(16)(17)(18)
- thinking in java test练习(8)(9)this关键字
- thinking in java test5.5练习(10)(11)(12)finalize()方法
- thinking in Java test3.1练习(1)print,println,printf
- thinking in java test5.1练习(1)(2)
- thingking in java test2.11练习(6)
- 《Thinking in Java》十七章_容器深入研究_练习13(Page484)
- 《Thinking in Java》十七章_容器深入研究_练习12(Page484)
- Thinking in JAVA笔记——第三章 操作符 &第四章控制执行流程
- 《Thinking in Java》第四篇笔记 Java中的操作符
- thingking in java test2.11练习(10)以及IDE中args的提前输入