zoukankan      html  css  js  c++  java
  • Java 位运算

    原码:将最高位作为符号位(以0代表正、1代表负),其余的各位代表本身的绝对值(以二进制表示)。

    +7 原码为:00000111
    -7  原码为:10000111

    反码:一个数为正,则它的反码与原码相同;一个数为负,则符号位为1,其余各位是原码取反。(0->1,1->0)

    +7 反码为:00000111
    -7  反码为:11111000

    补码:一个数若为负,则其补码为其反码+1;正数的原码、反码、补码相同。

    -7  补码为:11111001

    对有符号而言:

    1. 二进制最高位是符号位,0为正数、1为负数。
    2. 正数的原码、反码、补码都一样。
    3. 负数的反码 = 它的原码符号位不变,其它位取反。
    4. 负数的补码 = 它的反码 + 1。
    5. 0 的反码、补码都是 0 。
    6. Java 的数都是有有符号的。
    7. 计算机运算时,都是以补码的方式运算的,可以避免 +0 与 -0 的二进制表示方式不同。

    (1-2)位运算:1 - 2 = 1 + (-2)

    1的补码:00000001      -2的原码:10000010 -> 反码:11111101 -> 补码:11111110

         0 0 0 0 0 0 0 1
     +  1 1 1 1 1 1 1 0
    ———————————
         1 1 1 1 1 1 1 1    

    求得的结果是补码。由于最高位是1,说明是负数。负数的原码与补码不同,需要转换。

    补码:11111111 -> 反码=补码-1:11111110 -> 原码=反码最高位不变,其它取反:10000001,结果为 -1 。

    Java 位运算符:~(按位取反)、^(按位异或)、&(按位与)、|(按位或)

    &(按位与):两位全为 1 ,结果为 1 。

         0 1 1 0 1 1 0 1
     &  0 0 1 1 0 1 1 1
    ———————————
         0 0 1 0 0 1 0 1

     |(按位或):两位有一个为 1 ,结果为 1 。

         0 1 1 0 1 1 0 1
     &  0 0 1 1 0 1 1 1
    ———————————
         0 1 1 1 1 1 1 1

    ^(按位异或):两位有一个为 1 ,另一个为 0 , 结果为 1 。

         0 1 1 0 1 1 0 1
     ^  0 0 1 1 0 1 1 1
    ———————————
         0 1 0 1 1 0 1 0

    ~(按位取反):0 -> 1 , 1 -> 0 。

      ~ 0 1 1 0 1 1 0 1
    ———————————
         1 0 0 1 0 0 1 0     --------> -18

    注意:以上的算术都是以补码的形式运算。

    Java 中三个移位运算符:<<(算术左移、左移)、>>(算术右移、带符号右移)、>>>(逻辑右移、不带符号右移动)

    <<(算术左移、左移):符号位不变,低位补 0 。

    17 << 2  :00010001 —> 01000100
    -17 << 2 :11101111 —> 10111100 

    >>(算术右移、带符号右移):低位溢出,符号位不变,并用符号位补溢出的高位。(负数带符号移动,前面不足加1。)

    17 >> 2  :00010001 —> 00000100
    -17 >> 2 :11101111 —> 11111011 

    >>>(逻辑右移、不带符号右移动):低位溢出,高位补 0 。(正数不带符号右移与带符号右移相同,负数前面不足加0。)

    17 >> 2  :00010001 —> 00000100
    -17 >> 2 :11101111 —> 00111011

  • 相关阅读:
    《ASP.NET Core跨平台开发从入门到实战》Web API自定义格式化protobuf
    .NET Core中文分词组件jieba.NET Core
    .NET Core 2.0及.NET Standard 2.0
    Visual Studio 2017 通过SSH 调试Linux 上.NET Core
    Visual Studio 2017 ASP.NET Core开发
    Visual Studio 2017正式版离线安装及介绍
    在.NET Core 上运行的 WordPress
    IT人员如何开好站立会议
    puppeteer(二)操作实例——新Web自动化工具更轻巧更简单
    puppeteer(一)环境搭建——新Web自动化工具(同selenium)
  • 原文地址:https://www.cnblogs.com/xuekyo/p/2910276.html
Copyright © 2011-2022 走看看