【发布时间】:2017-02-11 07:48:15
【问题描述】:
#include <stdio.h>
int main()
{
char c = 255;
if (c > 128)
{
printf("This is unsigned number %d\n", c);
}
else
{
printf("This is signed number %d\n", c);
}
}
当我们用 255 初始化一个范围从 -127 到 128 的有符号字符时,在这种情况下会发生什么?它不会环绕,因为它是未定义的行为,但真正发生了什么?
我得到 -1 结果,但如何以及为什么?
【问题讨论】:
-
您在问未定义的行为会发生什么?认真的吗?
-
这不是未定义的行为,而是已定义的实现。所以这取决于你的编译器。
-
@JensGustedt 正在将 char 传递给 %d,好吗?
-
@GiorgiMoniava,是的,所有窄类型在传递给
va_arg函数时都会转换为int。
标签: c type-conversion unsigned signed