【发布时间】:2021-04-10 16:41:12
【问题描述】:
int main(){
int a = -33553454;
unsigned long b = a;
return 0;
}
在上面的例子中,a 是第一个符号扩展为 64 位值的 signed 整数(意味着 1 将放在其左侧),然后将值分配给 b 作为无符号整数。
可以肯定地说,只有原始源操作数的类型很重要(如果它有符号或无符号),并且在这种情况下不考虑目标类型(因为目标是无符号的,你会认为@987654325 @ 不会得到符号扩展,因为最终结果无论如何都是无符号的,并且 0 将填充 b 的左侧。)
【问题讨论】:
-
你编译过这个警告吗?
-
我不确定你的意思是什么“在这种情况下不考虑目标类型”。
-
您首先描述的是二进制补码表示法的工作原理。
-
我的意思是目的地是无符号的,你会认为
a不会得到符号扩展,因为最终结果无论如何都是无符号的,而 0 将填充b的左侧。
标签: c