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

    移位运算符就是在二进制的基础上对数字进行平移。按照平移的方向和填充数字的规则分为三种:<<(左移)、>>(带符号右移)和>>>(无符号右移)。
             在移位运算时,byte、short和char类型移位后的结果会变成int类型,对于byte、short、char和int进行移位时,规定实际移动 的次数是移动次数和32的余数,也就是移位33次和移位1次得到的结果相同。移动long型的数值时,规定实际移动的次数是移动次数和64的余数,也就是 移动66次和移动2次得到的结果相同。
             三种移位运算符的移动规则和使用如下所示:
    l <<
    运算规则:
    按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。
    语法格式:
    需要移位的数字 << 移位的次数
    例如: 3 << 2,则是将数字3左移2位
                       计算过程:
                                3 << 2
             首先把3转换为二进制数字0000 0000 0000 0000 0000 0000 0000 0011,然后把该数字高位(左侧)的两个零移出,其他的数字都朝左平移2位,最后在低位(右侧)的两个空位补零。则得到的最终结果是0000 0000 0000 0000 0000 0000 0000 1100,则转换为十进制是12。
    数学意义:
             在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。
    l >>
    运算规则:
             按二进制形式把所有的数字向右移动对应巍峨位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1。
    语法格式:
             需要移位的数字 >> 移位的次数
             例如11 >> 2,则是将数字11右移2位
    计算过程:
             11的二进制形式为:0000 0000 0000 0000 0000 0000 0000 1011,然后把低位的最后两个数字移出,因为该数字是正数,所以在高位补零。则得到的最终结果是0000 0000 0000 0000 0000 0000 0000 0010。转换为十进制是3。


    数学意义:
             右移一位相当于除2,右移n位相当于除以2的n次方。
    l >>>
    运算规则:
             按二进制形式把所有的数字向右移动对应巍峨位数,低位移出(舍弃),高位的空位补零。对于正数来说和带符号右移相同,对于负数来说不同。
                       其他结构和>>相似。

    原帖地址:http://blog.csdn.net/Mailbomb/archive/2008/05/30/2496168.aspx

    文章出处:http://www.diybl.com/course/3_program/java/javajs/2008531/118284.html

    有的时候,你希望将一个数的二进制值向右或向左移位。执行左移时,在一个数的二进制形式中,所有位都向左移动由移位运算符右侧的操作数指定的位数。 移位后在右边留下的空位将由零来填充。右移位运算符的原理相似,只是朝相反的方向移位。然而,如果数是负数,那么在左侧填充的值就是1而不是0。两个移位 运算符是>>和<<,它们分别是右移位和左移位运算符。除此之外,还有复合移位和赋值运算符<<=和>& gt;=。


    来看看下面的例子。假定现在有一个int值-7,它的二进制形式为1111 1111 1111 1111 1111 1111 1111 1001。在代码清单3-36中,我们使-7右移2个位置。

    代码清单3-36 使用右移位运算符

    int x;
    x = (-7 >> 2); // 11111111111111111111111111111001 becomes
    // 11111111111111111111111111111110
    // Write out "x is -2."
    System.Console.WriteLine("x = {0}.", x);

    输出3-17展示了代码清单3-36的结果。

    输出3-17

    x = -2.


    向右移位时,最右边的比特值会在边界处“离开”,左边的负数位标识符向右移动两个位置,腾出来的空白位置用1来填充。最终结果是-2。

  • 相关阅读:
    twitter api的使用获取关注者的时间线
    使用CloudSight API进行图像识别的Python脚本
    发送请求工具—Advanced REST Client
    windows使用celery遇到的错误
    Pythonic
    celery学习之入门
    windows中安装redis
    pandas 读写sql数据库
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near
    MySQL 存储引擎
  • 原文地址:https://www.cnblogs.com/NigelShi/p/5209152.html
Copyright © 2011-2022 走看看