zoukankan      html  css  js  c++  java
  • Java负整数的左移、右移、无符号右移

    转自  Java负整数的左移、右移、无符号右移

    Java负整数的左移、右移、无符号右移。正数的位移没有涉及到符号,而且正数的原码、反码、补码都是一样的,所以相对简单,但是对于负整数的位移,往往容易混淆。

    Java的<<  >>   >>> 都是针对补码来进行的,因为Java只存储补码。

    例如对整数-3进行<<  >> >>>运算做说明。

    整数-3的二进制

    原码为 10000000 00000000 00000000 00000011

    反码为 11111111 11111111 11111111 11111100

    补码为 11111111 11111111 11111111 11111101

    Java存储的整数-3即为11111111 11111111 11111111 11111101,

    1、

    对-3左移3位     -3<<3

    <<     >> 都是要关照符号位的,所以

    11111111 11111111 11111111 11111101 左移3位后为

    11111111 11111111 11111111 11101000 ,

    原码为:10000000 00000000 00000000 00100111,转为整数即-24

    2、

    对-3右移3位     -3>>3 ,

    就是对-3的补码11111111 11111111 11111111 11111101右移3位,结果为:

    1 111 1111111 11111111 11111111 11111,由于是负数,高位需要补1(正数高位补0),而

    1 111 1111111 11111111 11111111 11111

    的原码为10000000 00000000 00000000 00000001,结果为-1,所以-3>>3的结果整数值为-1

    3、

    对-3进行无符号右移, -3>>>3,由于>>>是不顾符号的,高位全部补0,

    11111111 11111111 11111111 11111101 无符号右移3位为

    000 11111111 11111111 11111111 11111

    由于无符号右移之后为正数,正数的补码和原码是一致的,所以 -3>>>3的值即为

    000 11111111 11111111 11111111 11111

    的值,变成整数输出为:0*2^31+0*2^30+0*2^29+1*2^28+1*2^27+.....+1*2^1+1*2^0=536870911

    原文地址:https://www.cnblogs.com/sunjie-one/p/8818901.html
  • 相关阅读:
    springboot+maven+thymeleaf配置实战demo
    报错AbstractStandardExpressionAttributeTagProcessor
    IllegalStateException: Unable to find a @SpringBootConfiguration
    Java装饰模式
    Java容器类解析
    jdk之object源码理解
    osx brew mysql
    java String[] 初始化
    date 常用
    mac mysql
  • 原文地址:https://www.cnblogs.com/jpfss/p/11514306.html
Copyright © 2011-2022 走看看