添加两个字符并将结果分配给C中的int

int main(){

 char a = -5;
 char b = -6;
 int c = a+b;
 return 0;
}

我在不同的体系结构中得到了不同的结果,使用gcc.

x86变量c进行了正确的符号扩展,我得到-11.

在其他一些架构c上没有符号扩展,你得到a+b位转换为 an的结果,int我得到501.

这是未定义的行为吗?

回答

char有时是无符号类型。使用signed char或者unsigned char如果您需要明确说明它。将打印添加到您的程序并在这两种情况下编译显示您的行为:

$ make example && ./example
cc     example.c   -o example
-11

对比:

$ CFLAGS=-funsigned-char make example && ./example
cc -funsigned-char    example.c   -o example
501


以上是添加两个字符并将结果分配给C中的int的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>