C语言 关于“长”数据赋给“短”变量的问题,比如long int 赋值给int 中怎么样才能没有误差?

[复制链接]
查看11 | 回复3 | 2010-9-19 02:14:05 | 显示全部楼层 |阅读模式
#include
#include
main()
{


short int i;

long L=6324232;

i=L;

printf("i=%d,L=%ld\n",i,L);

system("pause");
}
这个是程序,问题是:
L=6324232, 内存存储如下
高位部分【0|0.00.00.00.01.10.00.00】
地位部分【10.00.00.00.00.00.10.00】
i=-32760 赋值后内存如下
【10.00.00.00.00.00.10.00】
失去了高位部分,所以是-32760,如果一个LONG高位部分都是0,低位部分最高位也是0的话就没误差,如果低位部分是1的话,也是有误差的对不对?

回复

使用道具 举报

千问 | 2010-9-19 02:14:05 | 显示全部楼层
在低位部分的首位不是1时不会有误差。如果低位部分首位是1,那就会出现你看到的负值了。
回复

使用道具 举报

千问 | 2010-9-19 02:14:05 | 显示全部楼层
这就是典型的赋值溢出。由于整型数据在内存中是有补码形式存在。long型赋值给short型时,去掉高位部分。如果想不产生这种问题。那么long型的数据范围。一定要在short型范围之内。也就是说。必须在-32768~32767之间。
回复

使用道具 举报

千问 | 2010-9-19 02:14:05 | 显示全部楼层
当long int的值的范围在int之内时
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行