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/

  • 相关阅读:
    The Python Standard Library
    Python 中的round函数
    Python文件类型
    Python中import的用法
    Python Symbols 各种符号
    python 一行写多个语句
    免费SSL证书(https网站)申请,便宜SSL https证书申请
    元宇宙游戏Axie龙头axs分析
    OLE DB provider "SQLNCLI10" for linked server "x.x.x.x" returned message "No transaction is active.".
    The operation could not be performed because OLE DB provider "SQLNCLI10" for linked server "xxx.xxx.xxx.xxx" was unable to begin a distributed transaction.
  • 原文地址:https://www.cnblogs.com/snailjn/p/java.html
Copyright © 2011-2022 走看看