• 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 

    祝你早日攒够失望,然后开始新的生活。
  • 相关阅读:
    Nodejs下载和第一个Nodejs示例
    永久关闭Win10工具栏的TaskbarSearch控件
    对称加密,非对称加密,散列算法,签名算法
    【转】TTL和RS232之间的详细对比
    zlg核心板linux系统中查看系统内存等使用信息
    Power BI后台自动刷新数据报错 The operation was throttled by Power BI Premium because there were too many datasets being processed concurrently.
    剪切板和上传文件内容获取
    CSS, LESS, SCSS, SASS总结
    文字程序
    electron 打包“ERR_ELECTRON_BUILDER_CANNOT_EXECUTE”
  • 原文地址:https://www.cnblogs.com/LuRenJiang/p/6847314.html
Copyright © 2020-2023  润新知