zoukankan      html  css  js  c++  java
  • Java中的移位运算符<< ,>>和>>>

     
    public class ShiftTest {

    public static void main(String[] args) {
       //右移1位演示
       int x=0x80000000;
       System.out.println("x的十进制表示形式为:"+x);
       System.out.println("x的二进制表示形式为:"+Integer.toBinaryString(x));
       int y=x>>1;
       System.out.println("y的十进制表示形式为:"+y);
       System.out.println("y的二进制表示形式为:"+Integer.toBinaryString(y));
       int z=x>>>1;
       System.out.println("z的十进制表示形式为:"+z);
       System.out.println("z的二进制表示形式为:"+Integer.toBinaryString(z));
     
       //左移1位演示
       int m=0xC0000000;
       System.out.println("m的十进制表示形式为:"+m);
       System.out.println("m的二进制表示形式为:"+Integer.toBinaryString(m));
       int n=m<<1;
       System.out.println("n的十进制表示形式为:"+n);
       System.out.println("n的二进制表示形式为:"+Integer.toBinaryString(n));

    }

    }
    //输出结果:
    //x的十进制表示形式为:-2147483648
    //x的二进制表示形式为:10000000000000000000000000000000
    //y的十进制表示形式为:-1073741824
    //y的二进制表示形式为:11000000000000000000000000000000
    //z的十进制表示形式为:1073741824
    //z的二进制表示形式为:1000000000000000000000000000000
    //m的十进制表示形式为:-1073741824
    //m的二进制表示形式为:11000000000000000000000000000000
    //n的十进制表示形式为:-2147483648
    //n的二进制表示形式为:10000000000000000000000000000000

    总结:
    1.Java中int占4个字节的内存空间,也就是32个二进制位,这也就是我们常说的二进制位。
    而一个16进制位相当于4个二进制位,所以int占用8个16进制位。所以   int x=0x80000000;应该能看明白。

    2.java中“左移位”运算符 “<<”,是将整型数据的二进制形式,各数位向左移动给定的位数。右边的空出的所有位数补0。如,a<<1,是将a的二进制表示形式,左移移位,右边补零。

    3.java中“有符号右移位”运算符 “>>”,是将整型数据的二进制形式,各数位向右移动给定的位数。左边的空出的所有位数根据移位前的符号进行填充,也就是说,如果为整数,则填1,如果为负数,则填0.

    4.java中“无符号右移位”运算符 “>>>”,是将整型数据的二进制形式,各数位向右移动给定的位数。左边的空出的所有位数补0。

    5.java中,移位运算符适用的数据类型有:byte short char int long。

    6.对于低于int型的操作数,先转换为int型再移位。
    即:原始数据类型执行算术运算(或按位运算),类型比int型小的(即char、byte、short、),在进行运算之前,这些值会自动提升成int型。参见:使用java原始数据类型的几处细节

    7.对于int型整数移位,a>>b,系统先将b对32取模,得到的结果才是真正的移位的位数。例如:a>>33和a>>1的结果是一样的。而,a>>32的结果就是a。(即一个int型数是32位的,如果你移动了32位,那么所有数位都移出了,就没有什么意义了,所以系统会先将移动的位数对32取模)
    8.对于long型整数移位,a>>b,系统先将b对64取模,得到的结果才是真正的移位的位数。

    9.a>>1与a/2的结果是一样的,a<<1与a*2的结果是一样的。
    总之,一个数右移n位的结果是这个数除以2的n次方。一个数左移n位的结果是这个数乘以2的n次方。所以,当我们需要用程序求2的n次方时,可以写成这样,iresult=1<<n;  

    转载于:http://zhanyayun533.blog.163.com/blog/static/133176219201210269474644/

  • 相关阅读:
    Java之三元运算符
    Linux之用户和用户组管理指令
    Java之键盘输入语句Scanner
    进程同步和进程互斥
    Java之运算符优先级
    Java之单分支和双分支程序流程基本使用
    Python chr 函数 Python零基础入门教程
    Python globals 函数 Python零基础入门教程
    Python filter 函数 Python零基础入门教程
    Python locals 函数 Python零基础入门教程
  • 原文地址:https://www.cnblogs.com/snailjn/p/java.html
Copyright © 2011-2022 走看看