[C]位操作符

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

在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

 


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值