• 位运算


    位操作基础篇之位操作全面总结 - MoreWindows Blog - 博客频道 - CSDN.NET
    http://blog.csdn.net/morewindows/article/details/7354571

    总结一下:

    1、判断奇偶

    数i:  if(i&1)printf("%d",i)

    2、交换两数

    数a,b:   a^=b;

                b^=a;

                a^=b;   //^运算符具有交换律

    注意:a和b 相等和任一者为负数都可以!!但如果用一个数a和a则会出现错误

    3、变换符号:

      正数变负数,负数变正数

    ~a+1   //~是取反运算符

    4、取绝对值

    数a:

     int i=a>>31;

     return ((a^i)-i);

    5、空间压缩

    在数组指定位置上写1(相当于判断true)

    int b[5]={0};

    for(int i=0;i<40;i+=3)

    b[i/32] |=(1<<(i%32));

    判断某位上是否是1

    for(int i=0;i<40;i++)

    if((b[i/32] >>(i%32))&1)  putchar('1');

    6、高低位交换

    int a;

    a=(a>>8)|(a<<8);

    7、二进制逆序

    int a=2343;

    a=((a&0xAAAA)>>1)|((a&0x5555)<<1);

    a=((a&0xCCCC)>>2)|((a&0x3333)<<2);

    a=((a&0xF0F0)>>4)|((a&0x0F0F)<<4);

    a=((a&0xFF00)>>8)|((a&0x00FF)<<8);

    8、二进制中1的个数

    int a=243;

    a=((a&0xAAAA)>>1)+(a&0x5555);

    a=((a&0xCCCC)>>2)+(a&0x3333);

    a=((a&0xF0F0)>>4)+(a&0x0F0F);

    a=((a&0xFF00)>>8)+(a&0x00FF);

    还有一种做法:int i=0;

                      while(n)

                      { ++i; n=(n-1)&n;}  //  i 就是n 的1 的个数

    9、缺失的数字

    int a[7]={1,2,3,4,3,4,2};

    int lost=0;

    for(int i=0;i<lost;i++)

    lost^=a[i];

  • 相关阅读:
    Openlayers2中vector扩展FeatureLayer
    点图层叠加与事件响应
    geoserver服务wfs之GetFeature
    Echart在Openlayers的应用-航班的炫光特效
    Echart在Openlayers的应用-热力图
    Echart在Openlayers的应用
    WMS图例展示
    Java新手锻炼
    Java动手又动脑
    java递归问题小程序
  • 原文地址:https://www.cnblogs.com/daocaorenblog/p/5286084.html
Copyright © 2020-2023  润新知