java中 >>带符号右移 >>>无符号右移 和 <<带符号左移的认识和理解

0.工具类代码

//二进制字符串转换为int型
public static int BinstrToIntArray(String binStr) {
    int result=0;
    char [] binCharArray=binStr.toCharArray();
    for (int i = 0; i < binCharArray.length; i++) {
        result=result+binCharArray[i]-48;
        if(i!=binCharArray.length-1){
            result=result<<1;
        }
    }
    return  result;
}

1. >> 带符号右移运算符

既然>>被叫做带符号右移运算符。那就要将正数和负数区分来看。

  1. 代码
 //正数右移时,
        Integer integer1 = 23;
        String str = Integer.toBinaryString(integer1);
        System.out.println("23在计算机的二进制表示"+str);
        //带符号右移两位
        Integer integer2 = integer1 >> 2;
        String str2 = Integer.toBinaryString(integer2);
        System.out.println("23带符号右移两位的表示"+str2);
        System.out.println("23带符号由移两位的十进制表示形式:"+Util.BinstrToIntArray(str2));


        //负数右移时
        Integer integer3 = -5;
        String str3 = Integer.toBinaryString(integer3);
        System.out.println("-23在计算机的二进制表示"+str3);
        //带符号右移两位
        Integer integer4 = integer3 >> 2;
        String str4 = Integer.toBinaryString(integer4);
        System.out.println("-23带符号右移两位的表示"+str4);
        System.out.println("-23带符号右移两位的十进制表示形式:"+Util.BinstrToIntArray(str4));
  1. 结果:

注意23在计算机中的二进制实际是 00000000 00000000 00000000 00010111 前面的0被省略了

在这里插入图片描述
二进制的原码,反码,补码认识
3. 结论:

number >> n

number为正数时,将number右移n位在高位补零。

number为负数时,将number右移n位在高位补1。

2.>>> 无符号右移运算符

  1. 代码
		//正数无符号右移时,
        Integer integer1 = 23;
        String str = Integer.toBinaryString(integer1);
        System.out.println("23在计算机的二进制表示:"+str);
        //无符号右移两位
        Integer integer2 = integer1 >>> 2;
        String str2 = Integer.toBinaryString(integer2);
        System.out.println("23无符号右移两位的表示:"+str2);
        System.out.println("23无符号右移两位的十进制表示形式:"+Util.BinstrToIntArray(str2));

        //负数无符号右移时
        Integer integer3 = -5;
        String str3 = Integer.toBinaryString(integer3);
        System.out.println("-23在计算机的二进制表示:"+str3);
        //无符号符号右移两位
        Integer integer4 = integer3 >>> 2;
        String str4 = Integer.toBinaryString(integer4);
        System.out.println("-23无符号右移两位的表示:"+str4);
        System.out.println("-23无符号右移两位的十进制表示形式:"+Util.BinstrToIntArray(str4));
  1. 结果:

在这里插入图片描述

在高位补了零不是以1开头了,所以变成了正数。

  1. 结论:

number >> n

无符号右移,就是number无论是正数还是负数将其右移n位后,高位补零。

3.<< 带符号左移运算符

猜一下,带符号左移应该 无论对于正数还是对于负数都是在低位补零

  1. 代码
//正数带符号左移时,
Integer integer1 = 23;
String str = Integer.toBinaryString(integer1);
System.out.println("23在计算机的二进制表示:"+str);
//带符号左移两位
Integer integer2 = integer1 << 2;
String str2 = Integer.toBinaryString(integer2);
System.out.println("23带符号左移两位的表示:"+str2);
System.out.println("23带符号左移两位的十进制表示形式:"+Util.BinstrToIntArray(str2));

//负数带符号左移时
Integer integer3 = -5;
String str3 = Integer.toBinaryString(integer3);
System.out.println("-23在计算机的二进制表示"+str3);
//带符号左移两位
Integer integer4 = integer3 << 2;
String str4 = Integer.toBinaryString(integer4);
System.out.println("-23带符号左移两位的表示"+str4);
System.out.println("-23带符号左移两位的十进制表示形式:"+Util.BinstrToIntArray(str4));
  1. 结果:

    注意23在计算机中的二进制实际是 00000000 00000000 00000000 00010111 前面的0被省略了

在这里插入图片描述

  1. 结论:

number << n

带符号左移,无论对于正数还是负数,都是在低位补零。

对于正数相当于 乘以了2^n

4. <<< 无符号左移是不存在的

想想看如果存在 number <<< n 的话,它的作用是不是和 << 的作用是一样的。都是左移n位低位补零。 个人理解啊哈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值