zoukankan      html  css  js  c++  java
  • 位运算符号

     >> 算术右移  ===> a>>b : a/(2 的b%32)次方

    << 左移位运算 ===> a << b : a*2(b次方)

    1  算术右移位操作符

    舍弃二进制的最后N位,在二进制数的开头增加N位符号位。

    如果是负数故增加的两个符号位为11。

     exp1:
    
      int a1 = 12 >>1; //变量a1取值为6
    
    12的二进制表达式:
    
    0000 1100
    
          || 12 >> 1 右移动一位
    
    0000 0110
    
    十进制为6
    ------------------------------------------
    exp2:
    int a=12 >>2 ; //-3
    +12 == > -12
    0000 1100
    |-取反
    1111 0011
    |-加1
    1111 0100 <-- -12 二进制形式
    |
    1111 1101 <-- -12是负数故增加两个符号位为11
    |
    1111 1101 <--负数 --> 正数 
    1111 1100 1) -1
    0000 0011 2) 取反
    | 
    3 
    | 由于负数故为 -3 
    公式运算
    a >> b ==> a/2 (b%32)
    例如 :
            12 >> 1 ==> 12/2 (1 次方) = 6
            12 >> 33 ==> 12/2 (1次方) = 6
            -12 >> 2 ==> -12/2 (2次方 ) = -3
             -12 >> 66 ==> -12 /2 (66%32) = -12/2(2 次方) = -3
            128 >>2 ==> 128/2 (2%32) = 128/2 (2次方)= 32

    2  算术左移位操作符

    舍弃二进制数开头一位数。在二进制数尾部增加一位0。
    a << b ===> a*2(的b次方)

    例子:

    1 int a1 = 12<< 1; //24

    2 int a2 = -12 << 2;// -48

    3 int a3 = 128 << 2; //512

    4 int a4 = 129 << 2; // 516

    1 .

    1
    -----------------------------------------
    12 的二进制表达形式
    0000 0000 0000 1100
    去掉最右边的一位,最左边填充一个0
    0000 0000 0001 1000
    ||
    /
    等价于 24
    2
    -----------------------------------------
    -12 的二进制
    2.1 12 的二进制
    0000 0000 0000 1100
    2.2 取反
    1111 1111 1111 0011
    2.3 +1
    1111 1111 1111 0100
    2.4 left move 2 bit
    <delete the first 2 bit, and append 2 bit in the last of the string>
    1111 1111 1101 0000
    3 变成十进制数的形式
    3.1 负数变正数 第一步-1
    1111 1111 1100 1111
    3.2 负数变正数第二步 取反
    0000 0000 0011 0000
    ||
    /
    48 
    ||
    /
    由于是负数故为 -48 
    
    3 
    ----------------------------------------------
    int a3 = 128 << 2;
    3.1 128 binary bit
    0000 0000 1000 0000
    3.2 left move 2 bit 舍弃二进制开头两位,在尾部补上两位0
    0000 0010 0000 0000
    ||
    /
    512
    
    4
    -------------------------------------------------
    int a4 = 129 << 2; //516
    129的二进制
    0000 0000 1000 0001
    左移动两位
    0000 0010 0000 0100
    ||
    /
    516
  • 相关阅读:
    配置动态刷新RefreshScope注解使用局限性(一)
    OAuth2 Token 一定要放在请求头中吗?
    Spring Boot 2.3 新特配置文件属性跟踪
    为什么 Spring Boot 2.3.0 放弃Maven最终拥抱Gradle
    Spring Boot 2.3.0 新特性Redis 拓扑动态感应
    【spring cloud hoxton】Ribbon 真的能被 spring-cloud-loadbalancer 替代吗
    Spring Cloud Gateway 扩展支持动态限流
    聊聊 OAuth 2.0 的 token expire_in 使用
    「starter推荐」简单高效Excel 导出工具
    用mint-ui tabber写餐厅分层
  • 原文地址:https://www.cnblogs.com/cici-new/p/3541100.html
Copyright © 2011-2022 走看看