• 位运算------按位与、按位或、按位异或、取反、<<、>>、>>>


    程序中的所有数在计算机内存中都是以二进制的形式储存的,位运算就是直接对整数在内存中的二进制位进行操作。

    知识点:

    1、原码、反码、补码(以byte的1、-1举例)

    示例                    1                      -1                                   

    原码        0000 0001          1000 0001     ------>第一位是符号位,0是正数,1为负数  

    反码        0000 0001          1111 1110       ------>正数反码是其自身,负数则符号位不变,其他位置全部取反

    补码        0000 0001          1111 1111       ------->正数补码是其自身,负数则为反码+1

    当然也可以从1通过取反,然后+1的方式得到-1的补码

    2、补码:用于将十进制的负整数转换为二进制数。十进制的正整数可以除以2取余,负整数则需要补码。

          补码的流程:例如-10

      10:0000 0000 0000 1010

        取反:1111 1111   1111  0101

                              +1

        -10:1111  1111  1111  0110

    3、整数在内存中以补码存在。

    一、按位与(&)

    定义:如果两个相应的二进制位都为1,则该位的结果值为1,否则为0.

    示例:

    1、10与-10 &运算

     10:0000 0000 0000 1010     ----->   十进制转二进制

    -10:1111  1111  1111  0110     ----->   -10就是10取反,然后+1(补码)

    结果: 0000 0000 0000 0010     ----->   结果为2

    二、按位或(|)

    定义:如果两个相应的二进制位有一个为1,则该结果为1,否则为0.

    示例:

    1、10与-10 |运算

     10:0000 0000 0000 1010

    -10:1111  1111  1111  0110

    结果: 1111  1111 1111   1110  ----->结果-2

    第一位为符号位,1代表是负数,因此是补码形式存在,补码-->十进制。先-1再取反(符号位不变),。

    1000 0000 0000 0001

    +1

    1000 0000 0000 0010 ------> -2

    三、按位异或(^)

    定义:如果两个相应的二进制位值不同则为1,否则为0

    示例:

    1、10与-10 ^运算

     10:0000 0000 0000 1010

    -10:1111  1111  1111  0110

    结果: 1111  1111 1111   1100  ------> 结果-4

    四、取反(~)

    定义:用来对一个二进制按位取反。

    示例:

    1、10取反

    10:0000 0000 0000 1010

    结果: 1111  1111 1111  0101 ------> 结果-11

    五、左移(<<)

    定义:将一个数的各二进制位全部左移N位,右补0

    示例:

    1、10左移<<2

    10:0000 0000 0000 1010

    结果: 0000 0000 0010 1000------> 结果40

    六、右移(>>)

    定义:将一个数的各二进制位全部右移N位,移到右边的低位被舍弃,对于无符号数高位补0,负数高位补1.

    1、10右移>>2

    10:0000 0000 0000 1010

    结果: 0000 0000 0000 0010------> 结果2

    2、-10右移>>2

    -10:1111  1111  1111  0110

    结果: 1111  1111 1111   1101

          -1

              1111  1111 1111   1100

              取反,符号位不变

               1000 0000 0000 0011

    结果:-3

    七、>>>(无符号右移)

    定义:将一个数的各二进制位全部右移N位,移到右边的低位被舍弃,对于无符号数高位补0,只是对32位和64位的值有意义。

    示例:

    1、-10>>>2

    -10:1111 1111 1111 1111 1111  1111  1111  0110  ------->由于>>>只对32和64位有意义,所以把-10定义成32位的

    结果: 0011  1111 1111 1111 1111 1111 1111 1101

          -1

              0011  1111 1111 1111 1111 1111 1111 1100

                 取反码(符号位不变,正数反码是其本身)

             0011  1111 1111 1111 1111 1111 1111 1100

  • 相关阅读:
    hyper ubuntu20 网络配置
    clickhouseserver.service
    Springboot、springmvc集成mybatis
    linux安装jdk
    恢复git reset hard之前的commit号
    GMT?UTC?CST CTT时区(in Java)
    linux挂载
    mysql 报错This function has none of DETERMINISTIC解决方案
    springboot2.x集成 liquibase
    Springboot 中的注解 @EnableConfigurationProperties与@ConfigurationProperties
  • 原文地址:https://www.cnblogs.com/alimayun/p/10693358.html
Copyright © 2020-2023  润新知