高手请来试一下,高分相送

advancedchan 2009-11-16 01:25:24
if(lID>9999)
{
lvalue = (lID/10000)*1000 + lID%10000 + lLevel*10;
}
else if(lID>999)
{
lvaue = (lID/1000)*100 + lID%1000 + lLevel*10;
}
这段代码有没有办法只通过一句代码实现,主要使用位运算方法。
...全文
253 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
Chen 2009-11-16
  • 打赏
  • 举报
回复
雁过留痕
jackyjkchen 2009-11-16
  • 打赏
  • 举报
回复
三目运算符的效率和条件是一样的,就是简洁些
forster 2009-11-16
  • 打赏
  • 举报
回复
画个卡诺图吧。。得出来的没有可读性又有何用?
selooloo 2009-11-16
  • 打赏
  • 举报
回复
因为除数和模都不是2的整数倍,所以位操作很复杂
比较的话可以用位操作,
lID>9999可以写成 (0x270f-lID)^((0x270f^lID)&((0x270f-lID)^0x270f))
advancedchan 2009-11-16
  • 打赏
  • 举报
回复
正解
likee003 2009-11-16
  • 打赏
  • 举报
回复
(lID>9999)?(lvalue = (lID/10000)*1000 + lID%10000 + lLevel*10):((lID>999)?  lvaue = (lID/1000)*100 + lID%1000 + lLevel*10);


感觉效果一样,只是答到了楼主的心愿,变成了一句。
呵呵。
whg01 2009-11-16
  • 打赏
  • 举报
回复
还不如先转成10进制表示的字符串,然后再计算。效率上和楼主的写法差不多。
t1397018 2009-11-16
  • 打赏
  • 举报
回复
if(lID>9999)
{
lvalue = (lID/10000)*1000 + lID%10000 + lLevel*10;
}
else if(lID>999)
{
lvaue = (lID/1000)*100 + lID%1000 + lLevel*10;
}
(lID>9999)?(lvalue = (lID/10000)*1000 + lID%10000 + lLevel*10):(lID>999)? lvaue = (lID/1000)*100 + lID%1000 + lLevel*10:;
james_hw 2009-11-16
  • 打赏
  • 举报
回复
[Quote=引用楼主 advancedchan 的回复:]
if(lID>9999)
{
  lvalue = (lID/10000)*1000 + lID%10000 + lLevel*10;
}
else if(lID>999)
{
  lvaue = (lID/1000)*100 + lID%1000 + lLevel*10;
}
这段代码有没有办法只通过一句代码实现,主要使用位运算方法。
[/Quote]

感觉你这样写应该效率也不差,如果想追求更高的效率,是否应该在存储结构上做文章?例如将数字按位存到数组里。
buyan2009 2009-11-16
  • 打赏
  • 举报
回复
想用以10为底的对数函数求出十进制数的位数i
则lvalue = (lID/((int)pow(10,i-1)))*((int)pow(10,i-1)) + lID%((int)pow(10,i)) + lLevel*10;
baihacker 2009-11-16
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 advancedchan 的回复:]
简单地说就是要把十进制的最高位同第二高位的数字相加如36501变成9501
[/Quote]
那我的猜测就是对的...
advancedchan 2009-11-16
  • 打赏
  • 举报
回复
简单地说就是要把十进制的最高位同第二高位的数字相加如36501变成9501
myhder 2009-11-16
  • 打赏
  • 举报
回复
帮顶
baihacker 2009-11-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 hairetz 的回复:]
累,不明白为何需要这种需求。
[/Quote]
估计还有lID > 99999之类的代码,让LZ写得抓狂了
太乙 2009-11-16
  • 打赏
  • 举报
回复
[Quote=引用楼主 advancedchan 的回复:]
if(lID>9999)
{
  lvalue = (lID/10000)*1000 + lID%10000 + lLevel*10;
}
else if(lID>999)
{
  lvaue = (lID/1000)*100 + lID%1000 + lLevel*10;
}
这段代码有没有办法只通过一句代码实现,主要使用位运算方法。
[/Quote]lz主要是怕啥???
光宇广贞 2009-11-16
  • 打赏
  • 举报
回复
同问,给出上下文。

[Quote=引用 5 楼 hairetz 的回复:]
累,不明白为何需要这种需求。
[/Quote]
  • 打赏
  • 举报
回复
累,不明白为何需要这种需求。
baihacker 2009-11-16
  • 打赏
  • 举报
回复
可以写个函数计算lID是几位数
再定义三个数组
BASE[] = {0, 1, 10, 100, 1000, 10000}
MUL[] = {0, 0, 1, 10, 100, 1000}

然后就成了
x为lID的位数
lID/BASE[x]*MUL[x] + lID%BASE[x] + lLevel*10;
这样只是便在这部分的表达式统一了,看上去更美观.
但是运算速度会更慢.

(估计还有lID > 99999之类的代码,让LZ写得抓狂了,猜测意思为把最高位的数加到次高位上.
如果猜测错误,那么还要改逻辑
)
berryluo 2009-11-16
  • 打赏
  • 举报
回复
没想出来移位怎么个移法
xingzhe2001 2009-11-16
  • 打赏
  • 举报
回复
二进制好办十进制不好办
加载更多回复(1)

69,377

社区成员

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

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