二进制和位运算

(电脑记事本写的,手机看格式可能有点混乱)

&  与运算  : 只有为双 1 时才 1
|    或运算 :  只要有一个(二个也可以)为 1 才为 1
~   取反   :  二进制取反就行
^   异或  :   只有互相不同时才为 1  , 相同时为 0

逻辑位运算:
&& : 前面为1 ,就return , 无法穿透
| |    : 前面为0, 就return , 无法穿透

二进制:
        正负数转换:  取反 再 加一    
        之所以用1 来表示负数,是因为这要计算机运算时只要遵循加法法则,不用逻辑转化,提高效率

四位数二进制有正负表示范围(-8~-1 和 0~7);

  最小的分数没有相反数:
      列:1000  -- 0111 --  1000  (-8取相反数还是-8,由此可见一定位数的最小的负数没有相数)

>>    左移 : 二进制数全左移,负数高位补1,正数高位补0 (非负数相当于 /2)
<<    右移 : 而进制数全右移,(非负数相当于 *2)
>>>  逻辑右移 : 二进制全右移,(高位只补0)

位运算的应用:
    一个数转换为二进制数算法(python)

 for  i  in range(0,num):    #   十进制数位数(列如int 是 32 位)
    nums = num & (1<<i)        #  也可以模2,但相较于位运算时间花费较多
    print(1 if nums==0 else 1) 

                  

 为什么判断 nums等于0 或不等于0,而不是 是否等于1 呢?

 因为与运算是对整体数进行运算,不是对单独数位进行判断,且 1 其实是表示 2^0 , 对整体也可以能为2^2等 {2^i | i = 0,1,2,3,4,5……n}

所以nums==0 是一分支,而1是另一分支的一部分,这样判断情况少且好写


                                

    

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值