【发布时间】:2013-02-23 17:06:49
【问题描述】:
我的需要:
对于任何非负无符号长a,
输入 a = 5; Ans 应该是 3
输入 a = 12;答案应该是 4
输入 a = 1;答案应该是 1
输入 a=0 Ans 应该是 0
即从左侧查找最重要的 1 位置。
我尝试过的:
int count = 0;
if( a!=0 )
do{
count++;
}while( a >>= 1 );
问题 由于 while 循环和移位,需要更多时间。
建议的方法 如果我知道这 4 个字节是如何存储在内存中的(使用 char*),我将取出包含最重要的 1 的字节,因此在最坏的情况下,最多 8 次移位就足以找到答案。
【问题讨论】:
-
您确定需要担心那一点点速度吗?无论您使用什么来打印结果,都将花费更多时间来执行。
标签: c performance bit-manipulation bit-shift