long转换成int的问题

jackadandyyang 2007-03-13 08:51:48
long tmp1,tmp2;
if(yn==0)
{
yn=1;
if(e_out==0)
e_out=1; // let 0/0=1
}
if(d_rec==0)
{
d_rec=1;
if(e_out==0)
e_out=1; // let 0/0=1
}
tmp1 =div(e_out<<7,yn);//*128/yn;
if(tmp1>16384)
tmp1 = 16384;
else
if(tmp1<-16384)
tmp1 = -16384;
tmp2 =div(e_out<<7,d_rec);//*128/d_rec;
if(tmp2>16384)
tmp2 = 16384;
else
if(tmp2<-16384)
tmp2 = -16384;
tmp_noise += (tmp1*tmp1+tmp2*tmp2);
if(tmp_noise>0x3fffffff)
tmp_noise = 0x3fffffff;
noise_offline = sqrt(tmp_noise);
其中的变量都定义过,tmp_noise是long型,现在需要将tmp_noise转换成int型,该怎么做?直接强制转换肯定是错的。请大虾们帮忙!谢谢大家!
...全文
9493 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
luciferisnotsatan 2010-10-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 goodluckyxl 的回复:]

long转化为int?
如果int是2字节宽度那肯定有问题
如果不是直接赋值是没有问题的
[/Quote]
+1
ww884203 2010-10-29
  • 打赏
  • 举报
回复
你先在你的机器上用sizeof看看long和int的位数吧,要是long是int的两倍就用两个int存,要是是一样的就直接存就行了
玉女 2010-10-29
  • 打赏
  • 举报
回复
long size=dbms.getDcdtocolumnssize()-1;
int sizes=((Number)size).intValue();
javashengya 2010-10-29
  • 打赏
  • 举报
回复
这个问题有点麻烦,将long型拆成两个int型分别存储高位和低位,只是恢复原来的数据比较麻烦
FrankBIBI 2010-10-29
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 ww884203 的回复:]
你先在你的机器上用sizeof看看long和int的位数吧,要是long是int的两倍就用两个int存,要是是一样的就直接存就行了
[/Quote]
清楚明确~
jackadandyyang 2007-03-13
  • 打赏
  • 举报
回复
if(tmp_noise >= 0x0fffffff)
{tmp_noise >>= 28;
noise_offline = sqrt((int)tmp_noise);
noise_offline<<=14;}
else
if(tmp_noise >= 32768)
{ tmp_noise >>= 14;
noise_offline = sqrt((int)tmp_noise);
noise_offline<<=7;}
else
noise_offline = sqrt((int)tmp_noise);
可不可以这样呢?请大家帮忙看看!
cunsh 2007-03-13
  • 打赏
  • 举报
回复
楼主试试boost的 numeric_cast
int i;
try {
i=boost::numeric_cast<int>(tmp_noise);
} catch(boost::bad_numeric_cast& e) {
cout << "转换错误" << endl;
}
jixingzhong 2007-03-13
  • 打赏
  • 举报
回复
如果 tmp_noise 数值范围没有超过 int 数据范围,
那么可以直接赋值:

int test=tmp_noise; //OK,但是会有一个数据丢失警告,忽略之
jixingzhong 2007-03-13
  • 打赏
  • 举报
回复
直接强制转换肯定是错的
========================
楼主的意思是需要保存完整的信息么?

int pre, suffix;
pre=(tmp_noise>>16)&0xffff; //取高字节
suffix=tmp_noise&0xffff; //取低字节
intuition444 2007-03-13
  • 打赏
  • 举报
回复
强制转换可能会丢失数据。
不过如果long里存的数据小于2个字节,应该没有问题
goodluckyxl 2007-03-13
  • 打赏
  • 举报
回复
long转化为int?
如果int是2字节宽度那肯定有问题
如果不是直接赋值是没有问题的

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧