thinking in java test4.3练习(1)(2)(3)(4)(5)用三元操作符和按位操作来显示二进制
来源:互联网 发布:软件培训学校 北京 编辑:程序博客网 时间:2024/06/08 06:11
题目(1):写一个程序,打印从1到100的值。
代码如下:
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 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 test4.3练习(1)(2)(3)(4)(5)用三元操作符和按位操作来显示二进制
- thinking in java test4.5练习(6)(7)
- thinking in java test4.8练习(8)(9)(10)吸血鬼数字
- java操作符(Thinking in Java)
- 《java编程思想》4版第四章练习5 用三元操作符和按位操作符实现Integer.toBinaryString功能
- thinking in java 学习笔记(一)之操作符
- Thinking In Java笔记(第三章 操作符)
- thinking in java test5.1练习(1)(2)
- thinking in java test3.10练习(10)按位运算
- thinking in java test5.3练习(3)(4)(5)(6)(7)
- thinking in java test3.4练习(2)(3)别名机制
- 位操作+递归 (十进制转为二进制)
- 九度OJ 1151:位操作练习 (位操作)
- java 条件表达式(即三元操作符)的陷阱
- Thinking in Java 4th学习笔记--Java中的双等号(==)比较操作符与equals()方法
- thinking in java test练习(13)(14)
- 《Thinking In Java》笔记(3)
- thinking in java test3.17练习(14)
- Ubuntu 安装KaLi源
- PAT 乙级 1018. 锤子剪刀布(C语言版)
- iOS 全选 反选 和删除
- java中stringBuilder的用法
- 开源ETL工具kettle系列之常见问题
- thinking in java test4.3练习(1)(2)(3)(4)(5)用三元操作符和按位操作来显示二进制
- rpm 命令及应用
- 二叉树前序中序建立和后序中序建立
- Yahoo天气插件Api
- windows下配置nginx+php
- #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif
- 设 P(x,y,z)是所求平面上任一点,则向量 AB=(-3,0,1),AP=(x-3,y,z), 因此平面的法向量为 n1=AB×AP=(-y,x+3z-3,-3y), 而 xoy 坐标面的法向量为
- [转载]带外数据OOB与紧急模式URG
- 前台html+ajax 后台 servlet交互