Python-位运算符规则、原理与用法

一、预备知识:

1.十进制转二进制&二进制转十进制

Python-位运算符规则、原理与用法_第1张图片

2.代码实现:

# -*- coding: utf-8 -*-
#十进制转二进制
x = input("请输入十进制整数:")
x = int(x)
x = bin(x)
print("          二进制:",x[2:])

#二进制转十进制
x = input("请输入二进制整数:")
x = int(x,2)
print("    十进制结果为:",x)

二、运算方法与规则:

1.前言:在Python中,位运算符包括位与(&)、位或(|)、位求反(~)、位异或(^)、左移位(<<)和右移位(>>)。

2.运算方法与规则:位运算符只能适用于整数,其总体运算规则为:首先把整数转换为二进制表示形式,按最低位对齐,短的高位补0,然后进行位运算,最后把得到的二进制转换为十进制数。

3.具体规则:

4. 举例说明:

以13&17为例,首先把13转换为二进制数1101,把17转换为10001,然后按最低位对齐,13的二进制形式高位补0得到01101,按位进行与运算:

 

  • 位与运算符运算规则:0&0=0&1=1&0=0,1&1=1

  • 位或运算符运算规则:0|1=1|0=1|1=1,0|0=0

  • 位求反运算符运算规则:~0=1,~1=0,对于整数x有~x=-(x+1)

  • 位异或运算符运算规则:0^0=1^1=0,0^1=1^0=1

  • 左移位运算符运算规则:原来的所有位左移,最低位补0,相当于乘以2

  • 右移位运算符运算规则:原来的所有位右移,最低位丢弃,最高位使用符号位填充,相当于整除2        

01101 <====13

10001 <====17

---------

00001 ====>1

如果要计算13|17,则计算方法如下:

01101 <====13

10001 <====17

---------

11101  ====>29

 

如果要计算13^17,则计算方法如下:

01101 <====13

10001 <====17

---------

11100 ====>28

以13<<1为例,首先将13转换为二进制形式1101,然后左移1位,最低位补0,得11010,转换为十进制数为26,相当于13*2。

以13>>1为例,首先将13转换为二进制形式1101,然后右移1位,最低位丢弃,最高位使用符号位0补充,得110,转换为十进制数为6,相当于13//2。

位求反比较难理解一些,并不是简单地按位求反。这里的关键在于,计算机内部是使用二进制补码形式来存储数据的,整数的补码与原码相同,而负数的补码为其绝对值的原码各位求反再加1,这是理解位求反运算的关键。以~13为例,计算过程为:首先把13转换为二进制形式00001101(这里以8位为例,这不影响计算过程和结果),各位求反得到11110010,这是一个负数的二进制补码形式,其对应的数值是-14。再以~(-123)为例,首先将其转换为二进制补码形式10000101,然后按位求反得01111010,转换为十进制为122。

三、应用(算法实现):

1.1.算法功能:给定一个非空整数数组,除一个元素外,每个元素出现两次。找到那一个。

1.2.代码实现:

# -*- coding: utf-8 -*-
#
#  Algorithm function:
#  Given a non-empty array of integers, every element appears twice except for one. Find that single one.
class Solution:
    def singleNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        res = 0
        for i in nums:
            res = res^i
        return res

a = Solution().singleNumber([1,1,2])
print(a)

2.1运算案例:针对一个字符串中的字符元素进行位运算。

2.2运算过程展示:

Python-位运算符规则、原理与用法_第2张图片

 

                  Python-位运算符规则、原理与用法_第3张图片

你可能感兴趣的:(python)