栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java中的位运算符

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java中的位运算符

前言

我们知道二进制的高位符号 0代表正数 1代表负数如下(这里的正数省略了高位的0):

 System.out.println("负数:" + Integer.toBinaryString(-8));
 System.out.println("正数:" + Integer.toBinaryString(8));
 负数:11111111111111111111111111111000
 正数:1000
一、右移( >> ):高位补符号位,低位舍弃
public static void main(String[] args) {
        Integer num = 10;
        System.out.println("num的二进制:" + Integer.toBinaryString(num));
        Integer num1 = num >> 1;
        System.out.println("num右移1位:" + num1);
        System.out.println("num1的二进制:" + Integer.toBinaryString(num1));
        Integer num2 = num >> 2;
        System.out.println("num右移2位:" + num2);
        System.out.println("num2的二进制:" + Integer.toBinaryString(num2));

		Integer minus = -10;
        System.out.println("minus的二进制:" + Integer.toBinaryString(minus));
        Integer minus1 = minus >> 1;
        System.out.println("minus右移1位:" + minus1);
        System.out.println("minus1的二进制:" + Integer.toBinaryString(minus1));
    }
    
运行结果:
	num的二进制:1010
	num右移1位:5
	num1的二进制:101 //(0101)
	num右移2位:2
	num2的二进制:10 //(0010)
	
	minus的二进制:11111111111111111111111111110110
	minus右移1位:-5
	minus1的二进制:11111111111111111111111111111011

总结:右移几位就舍弃低位几位,然后根据符号位补充相应的高位

一、无符号右移( >>> ):低位舍弃,高位补0
 public static void main(String[] args) {
        Integer num = 10;
        System.out.println("num的二进制:" + Integer.toBinaryString(num));
        Integer num1 = num >>> 1;
        System.out.println("num右移1位:" + num1);
        System.out.println("num1的二进制:" + Integer.toBinaryString(num1));

        Integer minus = -10;
        System.out.println("minus的二进制:" + Integer.toBinaryString(minus));
        Integer minus1 = minus >>> 1;
        System.out.println("minus右移1位:" + minus1);
        System.out.println("minus1的二进制:" + Integer.toBinaryString(minus1));
    }
运行结果:
	num的二进制:1010
	num右移1位:5
	num1的二进制:101
	minus的二进制:11111111111111111111111111110110
	minus右移1位:2147483643
	minus1的二进制:1111111111111111111111111111011

总结:无符号右移,不论符号是0还是1,都向高位补0,低位舍弃

一、左移( << ):高位舍弃,低位补0
public static void main(String[] args) {
        Integer num = 10;
        System.out.println("num的二进制:" + Integer.toBinaryString(num));
        Integer num1 = num << 1;
        System.out.println("num左移1位:" + num1);
        System.out.println("num1的二进制:" + Integer.toBinaryString(num1));

        Integer minus = -10;
        System.out.println("minus的二进制:" + Integer.toBinaryString(minus));
        Integer minus1 = minus << 1;
        System.out.println("minus左移1位:" + minus1);
        System.out.println("minus1的二进制:" + Integer.toBinaryString(minus1));
    }
    
运行结果:
	num的二进制:1010
	num左移1位:20
	num1的二进制:10100
	minus的二进制:11111111111111111111111111110110
	minus左移1位:-20
	minus1的二进制:11111111111111111111111111101100
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/988004.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号