C函数:将无符号变量赋值给带有signed参数的函数

Gre*_*rey 5 c casting

我最近想出了一个问题.假设我们有:

void test(int32_t b){
    printf("value is %d", b);
}

int main(){
    uint32_t a = 43;
    test(a);  
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

将无符号变量传递给有符号参数时会发生什么?值的副本如何工作,以及演示如何工作?

有人能详细解释一下吗?

谢谢

cni*_*tar 5

如果该值足够小,则只需分配.否则,它以实现定义的方式分配.通常这意味着它将"环绕".

6.3.1.3-1

当具有整数类型的值转换为除_Bool之外的另一个整数类型时,如果该值可以由新类型表示,则它将保持不变.

否则,如果新类型是无符号的,则通过重复地添加或减去一个可以在新类型中表示的最大值来转换该值,直到该值在新类型的范围内.

否则,新类型将被签名,并且值无法在其中表示; 结果是实现定义的,或者引发实现定义的信号.