• Java 中位移运算符 >>,>>>,<<


     

     Java 中的三种位移运算符

    java中有三种移位运算符

    <<      :     左移运算符,num << 1,相当于num乘以2

    >>      :     右移运算符,num >> 1,相当于num除以2

    >>>    :     无符号右移,忽略符号位,空位都以0补齐

    下面将使用代码进行测试:这里涉及到码的表示:原码、反码、补码、移码

    原码:最高位表示符号位,剩余位表示数字,0表示正数,1表示负数
    
    反码:正数的反码等于原码,负数符号为不变,剩余位取反
    
    补码:一个数如果为正,则它的原码、反码、补码相同;一个数如果为负,去到反码然后加1
    移码:补码符号位取反

    例如:表示10的这个数字(8位)

    原码:0000 1010 

    反码:0000 1010

    补码:0000 1010

    移码:1000 1010

    例如:表示数字 -10

    原码:1000 1010 

    反码:1111  0101

    补码:1111  0110

    移码:0111  0110

    例如:

    public class MainTest {
    
      //用于输出数字本身与其二进制数字
    public static void printBinary(int num){ System.out.println(num); System.out.println(Integer.toBinaryString(num)); } public static void main(String[] args){ int num = -7774; //输出 num 的二进制位数 printBinary(num); //num 向右移动2位并输出 num =num >> 2; printBinary(num); //无符号右移 num =num>>>2; printBinary(num); } }

    其结构如下:

    -7774
    11111111111111111110000110100010
    -1944
    11111111111111111111100001101000
    1073741338
    111111111111111111111000011010

    这个数据市为了更明显的现实位移设计的,-7774向右移动2位,相当于处于4

    当-7774 无符号向右移动2位,首位补0,会改变原值,结果实际如下,0系统会不显示

    00111111111111111111111000011010

    但是,当 - 7774 改为 7774 结果如何???

    7774
    1111001011110
    1943
    11110010111
    485
    111100101

    最后无符号移动:负数与原值没有关系,正数符合除以 4 点特点

    但是 发现右移运算符点结果:

    负数:-1994

    正数:1993 

  • 相关阅读:
    python IDLE 如何实现清屏
    协同过滤算法(天池竞赛试题)
    二次排序
    异常类面试题
    异常类
    2020年Java程序员应该学习的10大技术
    java-servlet-EL表达式和java标签
    java-servlet过滤器和监听
    java-Servlet-cookie and session
    java-servlet-转发AND路径
  • 原文地址:https://www.cnblogs.com/bytecodebuffer/p/10188758.html
Copyright © 2020-2023  润新知