日期:2014-05-16  浏览次数:20972 次

算法改进
请问各路大侠下面这个语句能改进么?
byte myClip(int num)
        {
            return (byte)(num > 255 ? 255 : num > 0 ? num : 0);
        }
------解决方案--------------------
没有什么改进的必要。如果非要说改进的话,那就是你应该拆开这两个三元表达式。因为在num<0和num>255的时候会进行多余的判断和处理

if(num < 0)
   return 0;
else if(num > 255)
   return 255;
else
   return (byte)num;

------解决方案--------------------
这样子可以吗?
return num < 255 ? (byte)(num & (((uint)num >> 31) - 1)) : 255;

------解决方案--------------------
if(num>255)
    num=255;
else if(num<0)
   num=0;
return (byte)num;
------解决方案--------------------
引用:
这样子可以吗?
return num < 255 ? (byte)(num & (((uint)num >> 31) - 1)) : 255;


不要欺负楼主
------解决方案--------------------
引用:
不好意思,这个我没讲清楚,我这边做视频转换,这个语句占用了差不多百分之二十的CPU资源,我想问的是能不能从算法的角度去改写这个语句从而提高效率。

不能光看CPU占用,还要看调用次数,综合的来看。

如果想单纯优化这个方法,首先就像我上面说的,你的两个嵌套的三元表达式首先要拆开,避免多余的操作。
然后你可以分析一下数据,看看那种数据多,大于255,小于0,处于之间,再决定判断的顺序。