Python 算术运算中的奇异型提升

Python 算术运算中的奇异型提升,python,cython,Python,Cython,为什么要使用cython功能: cimport numpy as np cimport cython def foo(np.uint32_t b): cdef np.int32_t a = 0 if a-b <0: return 0 else: return 1 cimport numpy作为np 西姆波特赛顿酒店 def foo(np.uint32\U t b): cdef np.int32_t a=0 如果a-b1是正确的结果;有符号操作数应转换为相应的

为什么要使用cython功能:

cimport numpy as np
cimport cython

def foo(np.uint32_t b):
    cdef np.int32_t a = 0


    if a-b <0: return 0
    else: return 1
cimport numpy作为np
西姆波特赛顿酒店
def foo(np.uint32\U t b):
cdef np.int32_t a=0

如果a-b
1
是正确的结果;有符号操作数应转换为相应的无符号类型

6.3.1.8常用算术转换
[…]
-否则,如果具有无符号整数类型的操作数的秩大于或等于 等于另一个操作数类型的秩,然后为 有符号整数类型转换为无符号的操作数类型 整数类型


您是否尝试查看生成的C代码以了解它是如何翻译的?您是对的,似乎操作数声明正确,但结果有点奇怪。感谢您的解释!我一定错过了一些printf的工作原理<代码>uint32\u t b=1;int32_t a=0;printf(“%d\n”,a-b)给出正确的-1。@MarcinBurz
printf
不知道其参数的类型。如果使用正确的格式说明符
%u
,您将看到实际值4294967295。再次感谢。通过分析这个简短的例子,我学到了很多。