十进制转成16进制 (整除取余法)与(移位 与数 法) 速度比较解决办法

十进制转成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位?

------解决方案--------------------
楼主还是去补习一下二进制基础 和 汇编知识吧。

第一个问题: 简单的说,除法运算变成机器指令后,要远远大于移位运算。
第二个问题: 2^8 = 256, 一个int变成二进制后,是32位,把低8位归零,剩下24位肯定能被256整除,所以对它用256取模就是取低8位。
------解决方案--------------------
1.只知道移位运算快于除法运算
2.2^8=256