thinking in java test3.11练习(11)(12)(13)

来源:互联网 发布:s曲线加速算法 博客 编辑:程序博客网 时间:2024/06/02 01:53

练习(11)题目:以一个最高有效位为1的二进制数字开始(提示:使用十六进制常量),用有符号右移操作符对其进行右移,直至所有的二进制位都被移除为止,每移一位都要使用Integer.toBinaryString()显示结果。

我们知道在Java中,int类型的数是32位(这里不选用其它类型的数是因为它们在进行移位操作时会被转换成int类型,所以为了方便起见直接使用int),最高位为1,按照十六机制计数,最小为0x8000 0000,为了清晰的显示移位效果,我们选取这个数0x8080 8080
代码如下:

public class Test3_11 {    public static void main(String[] args){        int i = 0x80808080;        for (int j = 0; j < 32; j++) {            i >>=1;//每次移动一位,并将结果赋给i            System.out.println(Integer.toBinaryString(i));        }    }}

控制台输出如下:
11000000010000000100000001000000
11100000001000000010000000100000
11110000000100000001000000010000
11111000000010000000100000001000
11111100000001000000010000000100
11111110000000100000001000000010
11111111000000010000000100000001
11111111100000001000000010000000
11111111110000000100000001000000
11111111111000000010000000100000
11111111111100000001000000010000
11111111111110000000100000001000
11111111111111000000010000000100
11111111111111100000001000000010
11111111111111110000000100000001
11111111111111111000000010000000
11111111111111111100000001000000
11111111111111111110000000100000
11111111111111111111000000010000
11111111111111111111100000001000
11111111111111111111110000000100
11111111111111111111111000000010
11111111111111111111111100000001
11111111111111111111111110000000
11111111111111111111111111000000
11111111111111111111111111100000
11111111111111111111111111110000
11111111111111111111111111111000
11111111111111111111111111111100
11111111111111111111111111111110
11111111111111111111111111111111
11111111111111111111111111111111

练习(12)题目:以一个所有位为1的二进制数字开始,先左移它,然后用无符号右移操作符对其右移,直至所有的二进制位都被移除为止,每移一位都要使用Integer.toBinaryString()显示结果。

所有位为1的二进制数字为0xFFFF FFFF
代码如下:

public class Test3_11 {    public static void main(String[] args) {        int i = 0xffffffff;        System.out.println("先左移,得到数为:");        i <<= 1;//先左移一次        System.out.println(Integer.toBinaryString(i));        System.out.println("再不断右移,得到的数为:");        for (int j = 0; j < 32; j++) {            i >>>= 1;//每次移动一位,并将结果赋给i            System.out.printf("%32s\n",Integer.toBinaryString(i));        }    }}

控制台输出如下:
这里写图片描述

这里写图片描述

因为格式不对,所以直接截图显示。

练习(13)题目:编写一个方法,它以二进制形式显示char类型的值,使用多个不同的字符显示它。
其实还是可以用Integer.toBinaryString()方法。

public class Test3_11 {    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        char a = scanner.next().charAt(0);//去控制台输入的第一个字符        System.out.println(Integer.toBinaryString(a));    }}

控制台输出:
b
1100010

1 0