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

bandaoyu 2012-07-03 11:05:38

下面的代码是 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位?
...全文
925 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
nanchangfantasy 2012-07-05
  • 打赏
  • 举报
回复
都到汇编级别了,我还是不随便出口,免得误人子弟
小默 2012-07-05
  • 打赏
  • 举报
回复
关于取余的问题,都不能算编程的范畴,那是小学数学的范畴。
而为什么256取余的数就是低八位,请拿出草稿纸,自己算一下十进制到二进制的转换。
想不通就把256换成2、4、8、16来算算。
bandaoyu 2012-07-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
楼主还是去补习一下二进制基础 和 汇编知识吧。

第一个问题: 简单的说,除法运算变成机器指令后,要远远大于移位运算。
第二个问题: 2^8 = 256, 一个int变成二进制后,是32位,把低8位归零,剩下24位肯定能被256整除,所以对它用256取模就是取低8位。
[/Quote]一个int变成二进制后,是32位,把低8位归零

这句话不是很了解,请问哪里有相关的资料,可以给一个连接吗?
诶呦 2012-07-03
  • 打赏
  • 举报
回复
1.只知道移位运算快于除法运算
2.2^8=256
hz张三 2012-07-03
  • 打赏
  • 举报
回复
远远不止16条指令,http://topic.csdn.net/t/20051116/17/4397915.html
hz张三 2012-07-03
  • 打赏
  • 举报
回复
实现除法运算的机器指令(好像是16条指令),要远远多于移位运算的指令(1条指令)
hz张三 2012-07-03
  • 打赏
  • 举报
回复
楼主还是去补习一下二进制基础 和 汇编知识吧。

第一个问题: 简单的说,除法运算变成机器指令后,要远远大于移位运算。
第二个问题: 2^8 = 256, 一个int变成二进制后,是32位,把低8位归零,剩下24位肯定能被256整除,所以对它用256取模就是取低8位。
bandaoyu 2012-07-03
  • 打赏
  • 举报
回复







ohayou 2012-07-03
  • 打赏
  • 举报
回复
我估计你没打开优化,整数乘除2的整数幂应该被优化为位移操作的

69,373

社区成员

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

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