【发布时间】:2014-11-18 02:38:11
【问题描述】:
我很惊讶这个函数会为 dif1 和 dif2 产生不同的值
void test()
{
unsigned int x = 0, y = 1;
long long dif1 = x - y;
long long dif2 = (int)(x - y);
printf("dif = %lld %lld",dif1,dif2);
}
这是正确的行为吗?在 diff1 计算中,它首先将 32 位无符号差异提升为 64 位无符号值,然后添加符号。这是语言未指定的标准行为还是编译器错误?第二种形式是否保证产生-1,或者直到编译器实现?我想最安全的结构是: long long diff3 = (long long)x - (long long)y;
【问题讨论】:
标签: c