我是新手 请教俩个关于C语言的问题

来源:百度知道 编辑:UC知道 时间:2024/05/31 04:00:30
#include <stdio.h>
void main()
{
short A = 30000;
short B = 30000;
short C = 30000;
long D = 0;

D = A + B + C;

printf("\nThe D is %ld.",D);
}
得到的结果应该是90000万啊。为什么每次都是24464呢。谁知道帮帮忙啊。
我看书上有这种短整型+短整型=长整型的正确例题的 不知道为什么我一做答案就不对了。是编译器的原因还是机器的原因呢?程序好象应该没有问题吧?知道原因的请告诉下。你们机器里运行能得到90000么?

30000*3=90000没错!
但是,注意short这个type,A+B+C返回的还是short类型,而short一般是16位的,那么,看看90000这个数的二进制是10101111110010000,而一般的机器是x86构架,也就是说是little endian,那么这个数实际存储方式是10010000-101011111(按地址由低到高),但是,short只占两个字节,每个字节8位,所以高字节101011111只能截断为01011111,也就是1011111,这样一来,最终的数是101111110010000,它的十进制表示就是24464,而最终赋值到long类型的D,只是简单的short-long转换(正数高位0左补齐,负数高位1左补齐),对于结果,是无奈的;-)

我的机器确实得到了90000

你把short改成int试试

short是两个字节,范围最大是65535哦所以你的值是90000-65536=24464

没有问题
我这边 调试了没有问题的 90000

呵呵,我也是新手!可能是短整形和长整形的原因吧!前面都是短的、到后面是长的了。估计就是这个原因.字节数不一样

改成:
#include <stdio.h>
void main()
{
long A = 30000;
long B = 30000;
long C = 30000;
long D = 0;
D = A + B + C;
printf("\nThe D is %ld",D);
}
就行了。