Python 使用__以及";抽象基int类中的方法

Python 使用__以及";抽象基int类中的方法,python,abstract-base-class,Python,Abstract Base Class,我试图理解抽象基int类的\uuuu和方法。在这里,我用两种不同的方式来调用该方法。在几乎所有的情况下,这两种方法的行为都与我预期的一样,它们输出第二个值,因为这两个值都是“真实的”。但在两个数之和=-1的特殊情况下,第一个方法打印0。有人能说为什么吗 value=-4 打印(值._u和_u(3))35;打印0 打印(值和3)#打印3 问题不在于\uuuu和uu操作员。python中的按位运算符不是,而是&: >>(7)。u和_uu(5)=(7和5) 真的 至于和如何与非布尔值交互,您可以阅读

我试图理解抽象基int类的
\uuuu和
方法。在这里,我用两种不同的方式来调用该方法。在几乎所有的情况下,这两种方法的行为都与我预期的一样,它们输出第二个值,因为这两个值都是“真实的”。但在两个数之和=-1的特殊情况下,第一个方法打印0。有人能说为什么吗

value=-4
打印(值._u和_u(3))35;打印0
打印(值和3)#打印3
问题不在于
\uuuu和uu
操作员。python中的按位运算符不是
,而是
&

>>(7)。u和_uu(5)=(7和5)
真的
至于
如何与非布尔值交互,您可以阅读。针对您的具体情况:

返回第一个Falsy值(如果有),否则返回表达式中的最后一个值

在您的情况下,
-4
3
都是非错误值,因此返回最后一个值(
3
)。考虑到这一点,我们也可以理解为什么
-4和0以及3==0
,也就是说,因为
0
是错误的

请注意,
运算符的这种行为是有意义的。它只是以最自然的方式(或者至少是最自然的方式之一)扩展了自然布尔and运算符的逻辑。例如,
True和False以及False和x
将在遇到第一个
False
时立即返回
False
,而
True和True以及x
将只返回
x
,因为前面的所有布尔值都验证全局语句

最后,位运算符处理负数时明显奇怪的行为来自。基本上,要将一个正数(例如,4=000100)变为负数,只需将它的所有位反转(111011),然后加1(111100=-4)。在评估
3&-4
中,等于解决以下问题:

  000011
& 111100
--------
= 000000
出于同样的原因,
x&-4
对于
4,5,6,7
中的任何
x
(两个低位总是被-4(111100)二进制表示中的终止零所抵消)。

问题不使用
\uu和
运算符。python中的按位运算符不是
它是
&

>>(7)。u和_uu(5)=(7和5)
真的
关于
如何与非布尔值交互,您可以阅读。对于您的特定情况:

返回第一个Falsy值(如果有),否则返回表达式中的最后一个值

在您的情况下,
-4
3
都是非伪值,因此返回最后一个值(
3
)。考虑到这一点,我们也可以理解为什么
-4和0以及3==0
,即因为
0
是伪值

请注意,
运算符的这种行为是有意义的。它只是以最自然的方式(或至少一种最自然的方式)扩展了自然布尔and运算符的逻辑。例如,
True和False以及False和x
将在遇到第一个
False
时立即返回
False
,而
True和True以及x
将只返回
x
,因为前面的所有布尔值都验证全局语句

最后,位运算符在处理负数时的明显奇怪行为来自。基本上,要将正数(例如,4=000100)转换为负数,只需将其所有位(111011)反转,然后添加1(111100=-4)。在计算
3&-4
中,等于解决以下问题:

  000011
& 111100
--------
= 000000

出于同样的原因,
x&-4
4,5,6,7
中的任何
x
都将计算为
4
(在-4(111100)的二进制表示中,两个低位数字总是被终止的零抵消)。

一位同学指出()方法使用“按位和”。不是正常的和。另外,我在计算中使用了有符号整数,而不是2的补码。

一位同学指出,AND()方法使用“按位AND”.不是正常的和。另外,我在计算中使用了有符号整数,而不是2的补码。

你为什么说它不是按位AND?你从哪里得到“数字类”的概念?没有数字类。@user2357112:它是一个。你为什么说它不是按位AND?你从哪里得到“数字类”的概念?没有数字类。@user2357112:这是一个。所以,你不确定它为什么返回0?如果这对你来说很重要,我可以添加这个细节:)现在我读了我的答案,我想知道你是否在谈论
打印(-4)中的
0
。我可能也应该详细说明这个案例,但这可能不是你的问题?因此,你不确定它为什么返回0?如果这对你来说很重要,我可以添加这个细节:)现在我读了我的答案,我想知道你是否在
打印(-4.\u和\uuuu(3))
中谈论
0
。我可能也应该详细说明那个案子,但也许那不是你的问题?