如果将int传递给C中的byte参数会发生什么?

Nos*_*tap 2 c c++ int byte

如果将int作为参数传递给接受字节(char)的方法,C/C++如何处理?int被截断了吗?或者是其他东西?

例如:

void method1()
{
    int i = //some int;
    method2(i);
}

void method2(byte b)
{
     //Do something
}
Run Code Online (Sandbox Code Playgroud)

int如何"转换"为一个字节(一个字符)?它会被截断吗?

AnT*_*AnT 7

如果byte代表char类型,则行为将取决于char您的平台上是已签名还是未签名.

如果char是无符号,则原始int值将减小到unsigned char模数范围UCHAR_MAX+1.[0, UCHAR_MAX]范围中的值将保留.C语言规范将此过程描述为

...通过重复加或减一个可以在新类型中表示的最大值来转换该值,直到该值在新类型的范围内.

如果chartype是signed,则[SCHAR_MIN, SCHAR_MAX]保留范围内的值,而此范围之外的任何值都以某种实现定义的方式转换.(C语言另外明确允许在这种情况下引发实现定义的信号.)即,没有普遍的答案.请参阅平台的文档.或者,更好的是,编写不依赖于任何特定转换行为的代码.