溢出char到int转换

San*_*nti -3 c

#include <stdio.h>

void func(int a);

int main() {
    char ch = 256;
    func(ch);
    return 0;
}

void func(int a) {
    printf("%d\n", a);
}
Run Code Online (Sandbox Code Playgroud)

上述程序的输出是0.任何人都可以解释

eml*_*lai 5

256对于char您机器上的类型来说太大了.

所以它0按照C标准(来自N1570,重点是我的)来包装到最小值:

6.3.1.3有符号和无符号整数

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

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

3否则,新类型已签名且值无法在其中表示; 任一结果是实现定义或实现定义的信号上升.

256文字是一个int,并且char是符号或无符号的,因此,上述强调行为中的一个将发生的整数类型.