内容开头我们先插入一个小知识点:通过Random类的对象,程序可以生成许多不同类型的随机数字。Random rand = new Random(x) 其中x是一个整形数字。官方是这样说的:这个x只是方法Random()生成随机数的一个种子,通俗来说,就是生成随机数的一种规则。 例如如下案例将详细分析这种情况:
Random r = new Random();
int a = r.nextInt(26);
System.out.printf(a);
/*建立一个对象r,用于生成随机数的对象。
int a = r.nextInt(26)用于生成的随机数范围在[0-26)之间;
但是你每运行一次程序,生成的a的值可能都不一样,这是由于没有种子的结果。*/
//如果我们使用种子
Random r = new Random(47);
int a = r.nextInt(26);
System.out.printf(a);
/*由于JAVA语言的封装算法设定47这个种子在[0-26)的范围内,
所对应的随机数是24,所以程序每次运行后,a的值都是24。这便是种子的作用。*/
Integer类中toBinaryString()方法的使用: toBinaryString()方法用于:以二进制(基数为2)无符号整数形式返回一个整数参数的字符串表达形式。
//toBinaryString()方法的使用
public class Main
{
public static void main (String[] args)
{
int i1 = 0x2f;
System.out.println("i1:"+Integer.toBinaryString(i1));
int i2 = 0177;
System.out.println("i2:"+Integer.toBinaryString(i2));
char a = '!';
System.out.println("!:"+Integer.toBinaryString(a));
System.out.println("A:"+Integer.toBinaryString('A'));
}
}
/* 当i1为十六进制时,toBinaryString()方法能够将它转化为二进制表示;
当i2为八进制177时,八进制开头用0表示,及7*8^0+7*8^1+1*8^2=127,转化二进制为1111111
也能将为字符型的!转化为二进制表示,因为!的ASCLL码为33,所以运行结果为100001 。
A的ASCLL码为65,表示为1000001 */
由运行结果可以得出上述结论:
移位操作符的使用: 移位操作符有:移位操作符只可用来处理整数类型。左移位操作符(<<)能按照操作符右侧指定的位数将操作符左边的操作数向左移动(再低位补0);“有符号” 右移位操作符(>>)能按照操作符右侧指定的位数将操作符左边的操作数向右移动(若操作数为正,再高位补0;若操作数为负,再高位补1)。
案例一:以一个最高有效位为1的二进制数字开始(使用十六进制常量),用有符号右移操作符对其进行右移,直至所有的二进制位都被移出为止,每移一位都要使用Interger.toBinaryString()显示结果。
public class lesson11 {
public static void main(String[] args) {
int i = 0x80000000; //16进制数,最高位为1,共32位
for(int j = 0;j <= 31;j++) {
System.out.println("i = " + Integer.toBinaryString(i));//输出显示i
i >>= 1;//右移一位
}
}
}
测试结果:
i = 10000000000000000000000000000000
i = 11000000000000000000000000000000
i = 11100000000000000000000000000000
i = 11110000000000000000000000000000
i = 11111000000000000000000000000000
i = 11111100000000000000000000000000
i = 11111110000000000000000000000000
i = 11111111000000000000000000000000
i = 11111111100000000000000000000000
i = 11111111110000000000000000000000
i = 11111111111000000000000000000000
i = 11111111111100000000000000000000
i = 11111111111110000000000000000000
i = 11111111111111000000000000000000
i = 11111111111111100000000000000000
i = 11111111111111110000000000000000
i = 11111111111111111000000000000000
i = 11111111111111111100000000000000
i = 11111111111111111110000000000000
i = 11111111111111111111000000000000
i = 11111111111111111111100000000000
i = 11111111111111111111110000000000
i = 11111111111111111111111000000000
i = 11111111111111111111111100000000
i = 11111111111111111111111110000000
i = 11111111111111111111111111000000
i = 11111111111111111111111111100000
i = 11111111111111111111111111110000
i = 11111111111111111111111111111000
i = 11111111111111111111111111111100
i = 11111111111111111111111111111110
i = 11111111111111111111111111111111
案例二:以一个所有位都为1的二进制数字开始,先左移它,然后用无符号右移操作对其进行右移
, 直至所有的二进制位都被移出为止,每移一位都用Integer.toBinaryString显示结果。
public class lesson12 {
public static void main(String[] args) {
int i = 0xffffffff; //所有位均为1的16进制数
i <<= 1; //先进行一次左移操作
for(int j = 0;j <= 31;j++) {
System.out.println("i = " + Integer.toBinaryString(i)); //输出显示i
i >>>= 1; //无符号右移一位
}
} }
测试结果:
i = 11111111111111111111111111111110
i = 1111111111111111111111111111111
i = 111111111111111111111111111111
i = 11111111111111111111111111111
i = 1111111111111111111111111111
i = 111111111111111111111111111
i = 11111111111111111111111111
i = 1111111111111111111111111
i = 111111111111111111111111
i = 11111111111111111111111
i = 1111111111111111111111
i = 111111111111111111111
i = 11111111111111111111
i = 1111111111111111111
i = 111111111111111111
i = 11111111111111111
i = 1111111111111111
i = 111111111111111
i = 11111111111111
i = 1111111111111
i = 111111111111
i = 11111111111
i = 1111111111
i = 111111111
i = 11111111
i = 1111111
i = 111111
i = 11111
i = 1111
i = 111
i = 11
i = 1
案例三:移位操作符的使用。
public class Main
{
public static void main (String[] args)
{
int i1 = 0x2f;
i1 <<= 3; //即101111左移3位,为000101,十进制为376
System.out.println("i1 : "+i1);
int i2 = 0177; //八进制177转化为二进制为1111111
i2 >>= 4; //即1111111右移4位,为111,十进制为7
System.out.println("i2 : "+Integer.toBinaryString(i2));
}
}
运行结果: