[英]How a long data type will be stored in a memory?
我的需要:
對於任何非負無符號長a,
輸入a = 5; 答應該是3
輸入a = 12; Ans應該是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個移位就足以找到答案。
不要那樣做。 如果最重要的字節不包含您要查找的位(即,如果您的數字小於2 ^ (3 * CHAR_BIT)
),則您的方法將不起作用。 你為什么不從另一端開始呢?
unsigned find_msb(unsigned long long n)
{
int bits_max = sizeof(n) * CHAR_BIT - 1;
int i;
for (i = bits_max; i >= 0; i--) {
if ((n >> i) & 1) return i + 1;
}
return 0;
}
我認為你是擔心效率的方式。 最壞的情況是O(n),坦率地說,它永遠不會變得更好。 即使在慢速處理器上的嵌入式系統中,也沒有必要嘗試加速H2CO3的算法。
讓它工作,然后擔心效率。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.