算术运算中的奇怪类型推广

Mar*_*urz 5 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
Run Code Online (Sandbox Code Playgroud)

对于foo(1),返回1?我在C中编译了类似的代码,并没有观察到两个操作数(a,b)都被提升为unsigned int.

eca*_*mur 1

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

6.3.1.8 常用算术转换

[...]
- 否则,如果具有无符号整数类型的操作数的等级大于或等于另一个操作数类型的等级,则具有有符号整数类型的操作数将转换为具有无符号整数类型的操作数的类型类型。