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

题目(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运算结果对比后发现结果完全正确。

以上。

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值