您的位置:首页 > 编程语言 > Java开发

thinking in java test4.3练习(1)(2)(3)(4)(5)用三元操作符和按位操作来显示二进制

2016-08-09 20:47 591 查看
题目(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 <
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运算结果对比后发现结果完全正确。

以上。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 二进制