簡體   English   中英

長數據類型如何存儲在內存中?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM