python 位与运算,python语言中关系运算符

  python 位与运算,python语言中关系运算符

  介绍了Python语言的基本数据类型之一,——数值型。首先,详细介绍了Python语言的数值类型及其对应的算术运算、优先级和耦合性。然后,我们还将详细介绍整数类型的位操作。

  一.数字类型

  Python有四种数值类型:整数、长整数、浮点和复数。首先解释一下整数数据。

  1.整形外科

  Python语言的整数相当于C语言的long类型,32位机器上的整数位宽是32位,范围是-231到231-1,即-2147483648到2147483647;在64位系统上,整数类型的位宽通常是64位,范围是-263到263-1,即-92237203685475808到92237203685475807。

  Python的整数不仅可以用十进制表示,还可以用八进制和十六进制表示。当整数用八进制表示时,在数值前加前缀“0”;当整数以十六进制表示时,在数字前加上0X或0X。比如这里把整数15分别以八进制和十六进制赋给整型变量A和B,以十进制输出。

  #-*-代码:CP 936-*-

  a=017

  b=0xf

  打印变量A的值的十进制格式是% d% a。

  打印变量b的值的十进制格式是% d“% a”

  在IDEL中运行这个程序时,结果如下:

  图1:具有不同数值的输入和输出整数

  这是关于印刷文本的。

  打印变量A的值的十进制格式是% d% a。

  简单解释一下。这条语句的意思是将变量A作为有符号整数输出。这里的百分号%是Python语言的格式运算符,可以将变量值插入字符串。格式操作符的左边是字符串,用下面的蓝色字体表示。

  打印变量A的值的十进制格式是% d% a。

  格式运算符左侧的字符串可以包含一个或多个转换指示符。在此示例中,只有一个转换指示符% d。正如您在此处看到的,转换指示符通常以百分号开头,后跟一个字符串格式字符。请注意,转换指示符的百分号将用作字符串格式字符的开头,而不是格式运算符。字符串的格式字符d表示整数放在当前字符串的指定位置。打印时,转换指示器也用作占位符,因为字符串中的转换指示器将被替换为指定的值。格式操作符的右边,也就是上面用红色字体显示的部分,决定了谁将替换字符串占位符。本示例用变量a替换字符串中的占位符%d。

  与数值相关的字符串格式字符及其作用如下。

  ?d:有符号十进制整数

  ?u:无符号十进制整数

  ?o:无符号八进制整数

  ?x:无符号十六进制整数,a~f是小写

  ?x:无符号十六进制整数,A~F是大写的

  ?f:浮点数

  ?e,e:浮点数,采用科学计数方法。

  ?g,g:浮点数,使用最低有效位。

  2.长整数

  与C语言不同,Python的long不指定位宽。也就是说Python并没有限制长整数的大小,但实际上由于计算机内存有限,不可能使用无限长的整数。

  在中,如何区分长整数和整数值?通常,一个大写的L或小写的L加在一个数的末尾,表示该整数是一个长整数。示例:

  a=6812347598L

  b=6812347598l

  大家可能已经知道了,小写字母L和数字1在外观上很难区分,所以一般推荐大写字母L。

  请注意,从Python2.2开始,如果发生溢出,Python会自动将长数据转换为长数据,所以在长数据后不加字符L不会产生严重的结果。

  3.浮点型

  浮点类型用于处理实数或带小数的数字。Python的浮点类型相当于C语言的双精度浮点类型。实数有两种形式。一种是十进制格式,由数字和小数点组成。而且小数点1.23,123.0,0.0等都是不可或缺的。另一种是指数形式。比如789e3或者789e3就是789103的意思。字母e(或e)前面必须有一个数字。字符e)或e)后面可以跟一个符号,一个代表指数的符号,或者一个正号,如果不是的话。此外,索引必须是整数。

  4.多种类型

  由实部和虚部组成,常见形式为x yj。其中x是复数的实部,y是复数的虚部,其中x和y都是实数。请注意虚数部分的字母J可以大写也可以小写。比如5.6 3.1j和5.6 3.1j是等价的。

  对于复数类型变量n,也可以用n.real提取实部,n.imag提取虚部,然后用n.conjugate返回复数n的共轭复数,如下图所示。

  图2:求复数的实部、虚部和共轭复数

  二。算术运算符

  对于数值型数据,一般的算术运算包括加、减、乘、除、幂和模。

  依此类推,这些操作对应的运算符有:

  ?加法运算符:比如代数表达式2+3的Python表达式是2 ^ 3;

  ?减法运算符:-,比如代数表达式2-3的Python表达式是2-3;

  ?乘法运算符:*,比如代数表达式23的Python表达式是2 * 3;

  ?除法运算符:/和//,比如代数表达式23的Python表达式是2/3或2//3;

  ?取幂运算符:*,比如代数表达式23的Python表达式是2 * * 3;

  ?模运算符:%,比如代数表达式2mod3的Python表达式是2% 3;

  在早期版本中,Python只有一个除法运算符,即/,根据运算中涉及的操作数类型,它既可用于整除,也可用于真除。具体来说,如果操作数都是整数,则进行整除运算,即两个数相除后,只取商的整数部分,小数部分丢弃,不进行进位处理;此外,如果只有一个操作数是浮点数,则执行真除法运算,即结果是精确的浮点数,包括小数点后的数字。

  从Python2.2开始,除了/,又引入了一个除法运算符://,后一个运算符只用于除法。对于除法运算符/,默认行为与Python2.2之前的相同。根据操作数的不同,它可以是可分的,也可以是真的。如果希望两个运算符有明确的分工,即/只用于真除,//只用于除,需要做如下声明:

  从__未来_ _进口部门

  下图显示了执行上述语句前后两个除法运算符之间的差异:

  图3:两个除法运算符的用法示例

  如上图所示,在声明之前,当表达式2/3求值时,结果为0。这是因为运算中涉及的两个操作数都是整数,所以运算符/执行除法,但是表达式2.0/3的结果是0.666666666663。这是因为操作数中的2.0是浮点数,所以运算符/执行真除法。表达式2//3和2.0//3求值时,都是整除的,只是返回值一个是整数,一个是浮点。由于除法运算符/只能在我们用import语句做了相应的声明之后才能用于真正的除法运算,所以2/3和2.0//3的返回值此时都是0。50000.00000000001

  第三,不同数值数据之间的混合运算

  在Python中,不同的数值数据可以混合使用,例如以下对整数、浮点和复杂数据的交互式操作:

  图4:不同数值数据之间的混合运算

  我们发现上图中的结果是一个复数,因为在不同数值数据之间进行混合运算时,不同类型的数据会先转换成相同的类型,然后再进行运算。转换过程是,如果两个数的类型不同,先检查一个数是否可以转换成另一个数。如果可能的话,会进行转换,结果会返回两个数,其中一个是通过类型转换得到的。

  注意,不同类型之间的转换必须遵循一定的转换方向。例如,您不能将浮点数转换为整数,也不能将复数转换为其他数值类型。正确的转换方向是:整数到长整数,长整数到浮点数,非复数到复数。由于算术运算符是双目运算符,即有两个操作数参与运算,当参与运算的两个操作数的类型不同时,具体转换过程如下:如果参与算术运算的两个操作数中有一个是复数,则另一个操作数也转换为复数;否则,如果两个操作数中有一个是浮点数,另一个操作数也改为浮点数;否则,如果两个操作数中有一个是长整数,另一个操作数也转换成长整数;否则,这两个操作数必须是整数,不需要转换。

  下面举例说明不同数值数值运算的类型转换:

  10 98789升6.68(3.36焦耳)

  上面公式的运算过程是:进行10 98789L的运算,先把整数10转换成长整数10L,计算结果是98799L。执行9879l6.68的运算,先将长整数98799L转换为浮点数98799.0,计算结果如下:48799.0000000876 执行98805.67999999993(3.36j)的运算,先将浮点数9805.6799999993转换为复数(9895),然后

  四、算术表达式的求值顺序

  我们可以使用算术运算符和括号来连接操作数,形成算术表达式。这里的操作数可以是常量、变量、函数等。

  在Python中,算术表达式的计算顺序是由括号和运算符的固定优先级和组合决定的,它们的使用规则与代数中的基本相同:

  ?首先,计算括号内的表达式。所以我们可以使用括号来强制按照我们指定的顺序进行计算。这是因为,在所有运算符中,括号的优先级最高。如果括号是嵌套的,则计算顺序,即括号的组合方向或组合,是从内向外计算的。

  ?然后就是求幂。如果表达式中出现多个取幂运算,则从右向左进行计算。换句话说,取幂运算的组合方向是从右到左。

  ?然后是乘法、除法和模运算。如果一个表达式中连续出现多个乘、除、模运算,则按照从左到右的顺序进行求值,即它们的组合方向是从左到右。

  ?最后,加减。如果加减运算连续发生,则从左到右计算,即它们的组合方向是从左到右。

  综上所述,按照算术运算符的优先级顺序,它们是:

  括号>取幂运算符>乘法、除法和取模运算符>加法和减法运算符

  为了便于记忆,各种算术运算符的组合可以概括为:括号的组合是从里到外,取幂运算符的组合是从右到左,其他算术运算符的组合是从左到右。

  现在举个例子。看下面的表情:

  (((1 1) 2) 3) 4

  对于嵌套的括号,按照它们从里到外的组合,即使顺序是:在最里面的括号里计算1 ^ 1,得到计算结果2。然后用里外计算第二个括号里的公式2 ^ 2,结果是4。然后计算最外面括号里的公式4 ^ 3,结果是7。最后计算7 ^ 4得到最终计算结果11。

  让我们再次看看取幂运算符的正确组合,如下所示:

  2**3**1

  这个表达式的计算顺序是:首先计算3**1,即3的一次幂:31,计算结果为3。然后算2**3,也就是2的三次方:23,结果是8。实际上,上面的表达式相当于:

  2**(3**1)

  因此,可以在算术表达式中添加额外的括号,这可以使我们的代码更容易阅读和维护。

  5.整数数据的位运算

  Python可以对整数进行逐位操作,其支持的运算符和含义如下:

  ?按位AND

  ?:按位或

  ?按位异或

  ?~:反转

  ?

  ?向右移动

  对于整数数据,对数据的补码执行各种位操作;对于长整数数据,由于其位宽是不确定的,在进行位运算时,认为其补码的符号位向外无限延伸。举例说明了以下运算符:

  图5:位操作示例

  我们先来解释一下否定运算。如前所述,Python的整数数据位宽是32位,所以1的补码是000000000000000000000001。倒置后就变成了11111111111111111111111111111111111111111111111111111111111111111111,是-2的补码。

  对于按位AND,是参与运算的两个整数的补码按位进行的逻辑AND运算,也就是参与运算的两个操作数。如果两个对应的位都是1,则该位的结果是1,否则是0。2的二进制补码形式是0000001100000010(这里只显示它们的最低字节,因为前三个字节都是0),所以结果是0000010(前三个字节的所有位都是0,所以逻辑AND还是0,这里就略过了),正好是十进制数2的补码。注意正整数的补码和原码是一致的。

  对于按位或,是参与运算的两个数的补码按位进行的逻辑或运算,也就是参与运算的两个操作数。只要对应的两位中有一位为1,该位的结果就是1;只有当两个相应的位都为0时,该位的结果才为0。所以3 2的二进制补码形式是0000011 0000010(这里我们只显示它们的最低字节,因为前三个字节都是0),所以结果是0000011(前三个字节的所有位都是0,所以逻辑AND还是0,这里就略过了),正好是十进制数3的补码。注意逻辑或者进位,很多初学者以为结果应该是5,误认为是算术加法。

  对于按位异或,就是参与运算的两个数的补码,也就是参与运算的两个操作数,按位进行逻辑异或运算。如果两个对应的位相同,则该位的结果为0;如果两个对应的位不一样,也就是不一样,那么这个位的结果就是1。所以3 ^ 2的二进制补码形式是0000011 0000010(我们这里只显示它们的最低字节,因为前三个字节都是0),所以结果是0000001,正好是十进制数1的补码。

  对于左移操作,是将一个数的整个二进制位向左移动若干位。移位后低位填零,高位溢出部分丢弃。所以12是将整数10000000000000000000000000000001的整个补码左移2位,丢弃溢出的高位并将低位置零,得到结果0000000000000000000000000000000000000000000000000000000000000000000000000。实际上,将一个数向左移动几位,就相当于将这个数乘以2的几次方。

  对于右移位操作,一个数的整个二进制位向右移位几个位。如果数字为正数,移位后低位的溢出将被丢弃,高位将用零填充。如果数字为负,低位的移位溢出将被丢弃,高位将补1以保持符号不变。所以42是将正整数4的二进制补码00000000000000000000000000000右移2位,丢弃溢出的低位并用零填充高位,得到结果0000000000000000000000000001,它正好是十进制数1的补码,即20实际上,将一个数向右移动相当于将这个数除以2的几个幂。

  在优先级上,否定运算符~与算术运算符中的一元运算符处于同一级别(即只有一个操作数参与运算),是所有按位运算符中优先级最高的;然后是移位运算符(左移),在算术运算中低于否定运算符和加减运算符;最后,按位AND、OR和XOR运算符。按优先级顺序排列的操作符如下:

  反转运算符>左移运算符>右移运算符>按位AND运算符>按位Xor运算符>按位OR运算符

  在位算子中,否定算子(单目算子)~的组合是从右到左,其他双目算子的组合是从左到右。这里以左移和右移运算符为例进行演示,如下图所示

  当然,读者也可以通过使用如图所示的括号来试验其他按位运算符的优先级和组合。

  不及物动词摘要

  本文详细介绍了Python语言的各种数值类型,相应的算术运算,以及它们的优先级和组合。最后,我们深入解释整数的位操作。在本文的续篇中,我们将向读者介绍与数值类型相关的内置函数和库。

  共享给:

  2010-01-19 21:19

  浏览4103

  评论

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: