zoukankan      html  css  js  c++  java
  • java中逻辑右移">>>"算术右移">>"的区别?

    1、算数右移 “>>”

    考虑符号位,右移1位,若符号位为1,则左边补1;若符号位为0,则左边补0。

    2、逻辑右移 “>>>”

    不考虑符号位,左边统一补0

    例子:

    byte a = ~127;
    System.out.println(a);
    a = (byte)(a >>> 2);  //强制转成byte型,将对结果进行截断
    System.out.println(a);

    结果如下
    -128
    -32

    分析:
    首先, ~127的二进制数为10000000, (~127是取反运算)
    但是JAVA在对不足32位的数(byte,char,short)进行移位运算时, 都会先转成int(32位),所以此时a为11111111111111111111111110000000
    移位之后,(00)111111111111111111111111100000
    但是你在此a = (byte)(a >>> 2); //强制转成byte型,将对结果进行截断
    此时a为11100000, 就是32了

  • 相关阅读:
    python二维数组切片
    [转载]MIPS常用指令及实例
    使用vim编程步骤
    数组指针和指针数组
    线程基础
    顶层const和底层const
    递归调用
    输出流
    C++代码规范
    I/O流
  • 原文地址:https://www.cnblogs.com/zouhong/p/13526845.html
Copyright © 2011-2022 走看看