添加两个字符并将结果分配给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