[C]位操作符

来源:互联网 发布:行知实验幼儿园 编辑:程序博客网 时间:2024/05/01 19:44

位操作符使用整数作为操作数,位操作符将整数视为二进制位的集合,为每一位提供校验和设置的功能

在C中,我们通常会使用位操作符,如果使用的语言为C++,一般建议使用std::bitset


几种位操作符

<<   左移   -- 移动后,右边插入0以补充空位

>>   右移   --移动后,左边插入0以补充空位

&      与      --左右操作数,相同位都为1,操作结果该位才为1

|        或     --左右操作数,相同位有一个为1,操作结果就为1

~       非     --只有一个操作数,对操作数每一位都取反

^        异或  --左右操作数,对应的位不相同时,操作结果为1


比如 1000 >> 3   --> 1111101000 >> 3  --> 0001111101         --> 125

        1000<<3     --> 1111101000 <<3   --> 1111101000000   -->  8000

        100 & 10   -->  1100100 & 0001010-->  --> 0000000  --> 0

         ~100        --> ~1100100  ?

                         --> No 这里要分场景,如果是在32位机器下100  --> 0000000000 0000000000 0000011001 00

                         --> ~100 --> 1111111111 1111111111 1111100110 11

       100|10      --> 1100100 | 0001010  --> 1101110 --> 110

       100^10     --> 1100100 | 0001010  --> 1101110  -->  110


//位操作符操纵的整数的类型可以是有符号的也可以是无符号的。如果操作数为负数,则位操作符如何处理其操作数的符号位依赖于机器


几个简单应用


1、指定位 置0

     num & ~(1 << (pos -1) )

     比如100 --> 1100100  --> 将第三位置0  --> 1100000  -->  96

    pos = 3  --> pos -1  --> 2  

    1<<2  --> 100  -->  ~100  --> 1111111..... 0 11   (第3位为0,其他全为1)

2、指定位置1

    num | 1<<(pos-1)

3、取指定位的值

   ( num >>(pos -1) ) & 1

 


原创粉丝点击