十进制转成16进制 (整除取余法)与(移位 与数 法) 速度比较
下面的代码是 float 转成16bit的 16进制数, 精度只保留到0.1。
char tranfer[2]={0};
float temp=80.56;
tranfer[0]=((int)(temp*10))/256;//右移8位
tranfer[1]=((int)(temp*10))%256;//取低8位
tranfer[0]=((int)(temp*10))>>8; //右移8位
tranfer[1]=((int)(temp*10))&0xFF;//取低8位
在IAR编译中对比了2个方法的速度,第二种方法比第一钟快1/4左右, 有个疑惑。/256 除数是2的整倍数 为什么还是比>>8 慢了1/4? 而我添加一句tranfer[0]=((int)(temp*10))/9;//右移8位 发现比tranfer[0]=((int)(temp*10))/256;//右移8位 只慢了一点点 1/200 都不到。
tranfer[0]=((int)(temp*10))/256;和tranfer[0]=((int)(temp*10))>>8; 不同的地方在哪里?
tranfer[1]=((int)(temp*10))%256;为甚取余 可以得到低8位?