• java中的移位操作


    java中的移位操作仅仅对int和long有效,byte、short、char升级为int后再进行移位


    移位操作符有>>(右移)、<<(左移)、>>>(右移)三种,注意两点:1.没有<<<符号  2.移位是不循环的

    三种的差别是

    >>是带符号右移。负数高位补1,正数补0         ----->>>也就是在高位用符号位进行填充。

    <<左移无论负数还是正数,在低位永远补0

    >>>是不带符号右移,不论负数还是正数,高位补0( 无符号右移。忽略符号位。空位都以0补齐


    在详细的运算中所有转化为补码逻辑进行移位或者按位运算。


    測试程序:

    [java] view plain copy
    1. public class Shift {  
    2.     public static void main(String[] args) {  
    3.         System.out.println("******************正数左移在低位补0*******************");  
    4.         int a = 1;  
    5.         a = a << 2;  
    6.         System.out.println(a);  
    7.         System.out.println(Integer.toBinaryString(a));  
    8.         System.out.println("******************正数右移在高位补0********************");  
    9.         a = 1;  
    10.         a = a >> 2;  
    11.         System.out.println(a);  
    12.         System.out.println(Integer.toBinaryString(a));  
    13.         System.out.println("******从上面结果能够看出:移位是不循环的*****");  
    14.         System.out.println("看看负数的移位:");  
    15.   
    16.         System.out.println("***********负数的右移操作高位补1**************");  
    17.         int i = -1;  
    18.         System.out.println(i + ":");  
    19.         System.out.println(Integer.toBinaryString(i));  
    20.         i = i >> 2;  
    21.         System.out.println(i);  
    22.         System.out.println(Integer.toBinaryString(i));  
    23.         System.out.println("**********负数的左移操作低位补0*****************");  
    24.         i = i << 2;  
    25.         System.out.println(i);  
    26.         System.out.println(Integer.toBinaryString(i));  
    27.         System.out.println("*************再看看>>>操作符*************");  
    28.         System.out.println("*************负数的>>>操作高位补0***************");  
    29.         i = -1;  
    30.         System.out.println(Integer.toBinaryString(i));  
    31.         i = i >>> 10;  
    32.         System.out.println(i + ":");  
    33.         System.out.println(Integer.toBinaryString(i));  
    34.         System.out.println("*************注意:没有<<<符号**************");  
    35.   
    36.         System.out.println("**********byte类型移位时要强转换*************");  
    37.         byte k = 10;  
    38.         System.out.println(Integer.toBinaryString(k));  
    39.         k = (byte) ((byte) k >>> 2);  
    40.         System.out.println(Integer.toBinaryString(k));  
    41.     }  
    42. }  

    执行结果:

    ******************正数左移在低位补0*******************
    4
    100
    ******************正数右移在高位补0********************
    0
    0
    ******从上面结果能够看出:移位是不循环的*****
    看看负数的移位:
    ***********负数的右移操作高位补1**************
    -1:
    11111111111111111111111111111111
    -1
    11111111111111111111111111111111
    **********负数的左移操作低位补0*****************
    -4
    11111111111111111111111111111100
    *************再看看>>>操作符*************
    *************负数的>>>操作高位补0***************
    11111111111111111111111111111111
    4194303:
    1111111111111111111111
    *************注意:没有<<<符号**************
    **********byte类型移位时要强转换*************
    1010
    10


  • 相关阅读:
    [转]如何避免外发邮件被误判为垃圾邮件
    [转]php判断一个数组是另一个数组的子集
    [转]Linux下Nagios的安装与配置
    [转]MySQL事务学习-->隔离级别
    [转]最完美解决Nginx部署ThinkPHP项目的办法
    [转]Redis作者:深度剖析Redis持久化
    Html、Asp、Php、Jsp禁止页面缓存
    JS模板引擎
    HTTPS安全证书介绍
    PHP Curl实例
  • 原文地址:https://www.cnblogs.com/brucemengbm/p/7100366.html
Copyright © 2020-2023  润新知