博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

位运算符

Posted on 2023-03-12 22:15  乔55  阅读(9)  评论(0编辑  收藏  举报

移位运算符

  • 左移:右边补0
  • 右移
    • 若为无符号数或非负数,则左边补0
    • 若为负数,C语言无统一规定,有的补1,有的补0,得看实现机制
  • 为了代码可移植性,不要对带符号数进行移位运算

位运算的算法举例

// 判断是否为奇数
bool isOdd(int n)
{
    return n & 0x1
}

// 判断一个整数是否为2的幂
bool isPowerOf2(unsigned int n)
{
    unsigned int i = 1;
    while(i < n)
    {
        // i的值乘以2
        i <<= 1;
    }
    return i == n;
}

// 方法2,2的幂的特点提二进制表示只有1个1
bool isPowerOf2(unsigned int n)
{
    return (n & (n-1) == 0)
}