位运算

什么是位运算? 

程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算说穿了,就是直接对整数在内存中的二进制位进行操作。

位运算的操作数是整数类型字符型

 

位运算符:

|(or) 或运算

    通常用于二进制特定位上的无条件赋值,例如一个数 or 1的结果就是把二进制最末位强行变成1。如果需要把二进制最末位变成0,对这个数or 1之后再减一就可以了。

&(and) 与运算

    通常用于位运算的取位操作,例如一个数and 1,相当于取这个数最末位。

    一个位and 0,相当于将这个位置零。

    结合起来用,可将特定位置零。

^(xor) 按位异或

    相异为真

    通常用于特定位取反。如 xor 1

    xor运算的逆运算是它本身,也就是说两次异或同一个数最后结果不变,即

                                          (a xor b) xor b = a。

    xor运算可以用于简单的加密。

~(not) 按位取反

    如果not的对象是无符号整数(不能表示负数),那么得到的值就是它与该类型上界的差。

<<(shl) 左移运算符

    二进制位向左移动,右边补0

    相当于数字大小乘2

 

>>(shr) 右移运算符

    二进制位向右移动,左边在数字为正是用0补齐,在数字为负时用1补齐

    相当于数字大小除2

简单常用例题:

去掉最后一位 | (101101->10110) |

    x >> 1

在最后加一个0 | (101101->1011010) |

    x << 1

在最后加一个1 | (101101->1011011) | 

    x << 1 ^ 1

把最后一位变成1 | (101100->101101) |

    x | 1

把最后一位变成0 | (101101->101100) |

    x & 0

最后一位取反 | (101101->101100) |

    x ^ 1

把右数第k位变成1 | (101001->101101,k=3) |

    x | (1 << k - 1)

把右数第k位变成0 | (101101->101001,k=3) |

    x | (1 << k -1) ^ (1 << k -1)

    x &~ (1 << k - 1)

右数第k位取反 | (101001->101101,k=3) |

    x ^ (1 << k - 1)

取末三位 | (1101101->101) |     

   x & 7

取末k位 | (1101101->1101,k=4) |

    x & (1 << k ) - 1

取右数第k位 | (1101101->1,k=4) |

    (x & (1 << k - 1)) >> k - 1

    (x >> (k-1)) & 1

把右边连续的1变成0 | (100101111->100100000) | 

     x & (x + 1)

把右起第一个0变成1 | (100101111->100111111) |

    x | (x + 1)

把右边连续的0变成1 | (11011000->11011111) |

    x | (x - 1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值