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

以上。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 居住证到期了忘记续签了怎么办 贵州交警app忘记密码怎么办 科一第一次没过怎么办 社保转移时学历信息不符怎么办 天津摇号密码忘了怎么办 摇号账号密码忘了怎么办 京牌车去外地没有保险标怎么办 车子被扣12分怎么办 不在北京工作了社保怎么办 5年身份证到期了怎么办 c1驾照剩1分怎么办 c1驾校扣12分怎么办 我驾照扣了12分怎么办 小米手环绑定不了怎么办 小区总有小年青骑摩托车扰民怎么办 摩托车行驶证副本丢了怎么办 摩托车驾照副本丢了怎么办 公司行驶证掉了怎么办 身份证外迁了过户的话怎么办 驾照体检报告丢了怎么办 常州医保卡丢了怎么办 驾驶证违章罚单丢了怎么办 身份证被别人办了信用卡怎么办 被别人办了信用卡怎么办 考驾照体检忘带身份证怎么办 c证扣12分怎么办新规 c照12分不够扣怎么办 扣了18分怎么办一次性 c照累计扣12分怎么办 车辆超速扣12分怎么办 一次超速扣12分怎么办 分扣了罚款未交怎么办 c照一次扣12分怎么办 人在外地身份证到期了怎么办 手机进水了屏幕不亮怎么办 北京一证通过期怎么办 小米6音量键进水怎么办 考驾照怕过不了怎么办 学车对车没感觉怎么办 居住证到期2个月怎么办 生育险差一个月怎么办