• C 位运算符与应用


    位运算符列表:

    &  按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0
    |   按位或 两个相应的二进制位中只要有一个为1,该位的结果值为1
    ^  按位异或 若参加运算的两个二进制位值相同则为0,否则为1
    ~  取反 ~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0
    << 左移 用来将一个数的各二进制位全部左移N位,右补0
    >> 右移 将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0

    :下面内容提到的第几位都是从右边开始数。

    1、“按位与” 运算符(&)的用途:

    (1)清零

    若原来的数中为1的位,新数中相应位为0,然后使二者进行&运算,即达到清零效果。

    (2)取一个数中某些指定位

    若有一个整数a(2byte)为00101100 10101100,想取其中的低字节,即

    a&11111111==10101100

    (3)保留指定位:

    与一个数“按位与”运算,此数在改位取1,其余位取0

    例如:二进制整数a为01010100,要把第6,5,4,2,1位保留下来就应该

    a&00111011==00010000

    (4)判断一个数是奇数还是偶数:

    因为一个数 and 1的结果就是取二进制的最末位,

    所以二进制的最末位为0表示该数为偶数,最末位为1表示该数为奇数

    2、“按位或”运算符(|)的用途:

    按位或运算常用来对一个数据的某些位定值为1,如:

    二进制整数a为1010100,c为char字符型,若想使第6位改为1,则

    (1)a|1110000即1110100

    (2)c |= (1<<6);

    :若想使第i 位改为0,则

    void SetBit(char c,int i){
    c
    &= ~(1<<i); }

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

    见代码:

    #include <stdio.h>
    int main()
    {
        int a=3,b=4;
        a=a^b;
        printf("%d
    ",a);
        b=b^a;
        printf("%d
    ",b);
        a=a^b;
        printf("%d
    ",a);
        return 0;
    }

    Output

    7
    3
    4

    4“取反”运算符(~)

    即用来求整数的二进制反码

    5、“异或”运算符(^)

    可以用来使第i位翻转,即0变成1,1变成0

    void FlipBit(char *c, int i){
            c^=(1<<i);
        }

    6、位运算与赋值运算符组成复合赋值运算符入,如:

    &=,|=,>>=,<<=,^=

    例子:

    a &= b相当于 a = a&b

    a <<=2 相当于 a = a<<2

     以上内容改编自:

    http://blog.sina.com.cn/s/blog_60e96a410100mjd2.html 

    祝你早日攒够失望,然后开始新的生活。
  • 相关阅读:
    记一次博客被日的分析过程
    省钱版----查找 IoT 设备TTL线序__未完待续
    于bugku中游荡意外得到关于CBC翻转攻击思路
    清除浮动技巧总结
    程序猿的幸福
    Memcachedclientutils类
    leetcode 2 Add Two Numbers
    arduino小车入门教学——第三天(arduino基础)
    SAP MM模块 经常使用函数
    Java代码格式
  • 原文地址:https://www.cnblogs.com/LuRenJiang/p/6847314.html
Copyright © 2020-2023  润新知