python二进制移位_python学习特辑——二进制和位运算篇

以前学习java的时候,二进制和位运算只停留在"懂"的程度,从来没有花时间去推导和总结,作为一个数学系的学生,一直想花点时间做推理证明

java和python关于二进制和位运算的规则差不多,这次就当是补偿

一、符号约定

⌊p⌋:比p小的最大整数,称为向下取整

⌈p⌉:比 p大的最小整数,称为向上取整

xi:x在二进制下的第i位数

二、二进制表示

截取的  的图,推导过程使用求和公式来计算,思路差不多

n这样理解:使得10n <= x 的最大的n值,bi的取值是一个集合

三、移位运算<< 和 >>

1、x,⌊x/2⌋,2x在二进制之间的关系

2、推导结论

结论一:x << k = 2kx

结论二:  x >> k = ⌊x/2k⌋

结论三:二进制的递推公式,这里理解下即可,python中用bin(n)函数可以直接打出n的二进制,如bin(123)打印为 0b1111011

这点同java的

Integer.toBinaryString(n),结果也是以0b开头

四、按位运算

位运算符只能适用于整数,总体运算规则为:

首先把整数转换为二进制表示形式,按最低位对齐,短的高位补0,然后进行位运算,最后把得到的二进制转换为十进制结果

以下四种:&,|,^,~,分别是与,或,异或,取反

具体的例子就不说了,记几个思路清奇的应用

1、判断奇偶数

defisodd(x):return True if (x & 1) else False

2、求下标x和y的中间值

比如二分查找中的mid = (low+high) // 2 = (low+high) >>1

3、异或运算交换a和b的值

a ^=b

b^=a

a^= b

4、异或运算找出单身汉

在2N+1个自然数中,有N个数均出现2次,找出只出现1次的那个自然数

方案:所有数做异或计算,最终的结果就是要找的那个数

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值