直接常量使用Integer类中的转换方法与移位操作符的使用

内容开头我们先插入一个小知识点:通过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));
	}
}

运行结果:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Blizzard-107

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值