【发布时间】:2020-11-18 18:42:14
【问题描述】:
由于- 运算符应用于x(即unsigned),此函数是否会调用未定义的行为?我搜索了标准,找不到解释。
unsigned foo(unsigned x)
{
return x ^= x & -x;
}
IMO 是的。
编辑void func(unsigned x)
{
printf("%x", -x);
}
int main(void)
{
func(INT_MIN);
}
IMO唯一的解释是它被提升为更大的有符号整数大小,然后转换为无符号。
如果提升为更大的整数大小,如果没有更大的有符号整数类型会怎样?
【问题讨论】:
-
评论不用于扩展讨论;这个对话是moved to chat。
标签: c language-lawyer