zoukankan      html  css  js  c++  java
  • 位运算集锦 [转]

    文中2'k代表2的k次方

       

    1 除以2的k次幂可以用位运算:

    n/2'k == n>>k

       

    2 对2的k次幂取余数可以用位运算:

    n%2'k == n & ((1<<k)-1)

    比如 100%32

    100的二进制为          1100100

    ((1<<5)-1)等于31为  0011111

    两个数相与即得 100,故

    100%32 = 4

       

    3 对于整数n,从低位开始,把它的第k位(0<=k<=31)置为1的操作为:

    n = n | (1<<k)

       

    4 对于整数n,从低位开始,把它的第k位(0<=k<=31)置为0的操作为:

    n = n & ~(1<<k)

       

       

    5 对于整数n,从低位开始,测试它的第k位(0<=k<=31)是否为1,若为1,返回一个大于0的数,否则返回0

    return  n & (1<<k)

       

      

    6 对于整数n,判断它是奇数还是偶数

    n & 1大于0,则n是奇数,否则n是偶数

       

      

    7 对于整数n,若n是奇数,则把n减1变成偶数,若n是偶数,则把n加1变成奇数

    n = n ^ 1

       

      

    8 对于奇数n,有如下性质

    (n-1) ^ n ==1

       

      

    9 最大的int

    01 1111111111 1111111111 1111111111

    MAX_INT = ~(1<<31)

       

      

    10 最小的int

    10 0000000000 0000000000 0000000000

    MIN_INT = (1<<31)

       

      

    11 把最低位的1变为0

    比如: 111000   ---> 110000

    n = n - (n&-n)

       

      

    12 判断两个整数数是否同号

    #define MASK 0x80000000

    flag = (x & MASK) ^ (y & MASK)

    如果flag为0,说明不同号,否则同号

       

      

    13 交换两个值,不用临时变量

     

    想将a和b的值互换,可以用以下赋值语句实现:
        a=a∧b;
        b=b∧a;
        a=a∧b;

       

       

    14 bitset的C语言实现

     

     

    [转] http://kenby.iteye.com/blog/1011480

  • 相关阅读:
    Altium Designer如何导出SMT贴片机用的坐标文件
    STM8S003设计注意事项
    Keil4打开KEIL5未响应卡死的问题
    STM32 adc 多通道采集相互串扰问题解决
    STM32 RS485 和串口 只能接收不能发送问题解决
    AD中元器件报警的处理——器件高度报警
    QT乱码解决办法《转》
    STM32下载失败,st-link v2 在线下载sw模式检测不到
    docker部署普罗米修斯监控
    进程管理常用命令
  • 原文地址:https://www.cnblogs.com/longdouhzt/p/2253227.html
Copyright © 2011-2022 走看看