c语言能将Long类型直接赋值给longlong类型吗

#include <stdio.h>int main(){ long n; long long sum=0; scanf("%ld",&n); sum=(1+n)*n/2; printf("%lld",sum); return 0;}这段代码,当为输入n=1000000000时,结果为-243309312,为什么不是500000000500000000。

可以,以上运行过程中会自动将long类型数据转换为long long类型,而后赋值。追答

你以上代码的问题不是出在赋值过程,而是出在乘法运算过程,(1+n)*n的结果是long类型,这个中间结果已发生溢出。因此需要进行强制类型转换如下:
sum=(long long)(1+n)*n/2;

温馨提示:答案为网友推荐,仅供参考