C++数据结构和算法分享专题算法

16_位运算符分析

2018-03-08  本文已影响8人  编程半岛

关键词: C语言中的位运算符、 左移和右移注意点、位运算防错准则、 位运算符和逻辑运算符的区别

1. C语言中的位运算符

位运算符直接对bit位进行操作,其效率最高

2. 左移和右移注意点

3. 0x1 << 2 + 3的值是什么?

#include <stdio.h>

int main()
{
    printf("%d\n", 0x01 << 2 + 3);
    
    return 0;
}

输出结果:

32

总结:四则运算的优先级高于位运算

4. 位运算防错准则

小技巧:

  • 左移n位相当于乘以2的n次方,但效率比数学运算高
  • 右移n位相当于除以2的n次方,但效率比数学运算高

5. 不借助第三个变量交换两个整形变量的值(位运算实现)

#include <stdio.h>

// 通过异或运算来实现两个整形值的交换
#define SWAP(a, b)  \
{                   \
    a = a ^ b;      \
    b = a ^ b;      \
    a = a ^ b;      \
}

int main()
{
    int i = 1;
    int j = 2;
    
    printf("i = %d, j = %d\n", i, j);
    
    SWAP(i, j);
    
    printf("i = %d, j = %d\n", i, j);
    
    return 0;
}

6. 位运算符和逻辑运算符的区别

#include <stdio.h>

int main()
{
    int i = 0;
    int j = 0;
    int k = 0;
    
    if( ++i | ++j & ++k )
    {
        printf("Run here...\n");
    }
    
    printf("%d\n", i);
    printf("%d\n", j);
    printf("%d\n", k);

    return 0;
}

输出结果:

Run here...
1
1
1

总结:注意区分逻辑运算的与或非运算和位运算中的与或非运算

7. 小结

声明:此文章为本人在学习狄泰软件学院《C语言深度解析》所做的笔记,文章中包含狄泰软件资料内容一切版权归狄泰软件所有!

上一篇 下一篇

猜你喜欢

热点阅读