2016-12-28 19 views
0

有幾個項目列表。列表的數量< 8.任何列表中的項目數量< 16.用戶可以在每個列表中選擇一個項目。所以我們有一個整數序列。例如:9,0,12,4.如何通過位移在一個整數中保存多個小整數Objective C

有什麼簡單的方法可以將用戶選擇存儲在一個Integer(32或64)中並從那裏讀取?

可能你知道存儲4位整數序列的更優化方法嗎?

謝謝!

+0

歡迎來到SO。請定義「最佳」。你的意思是記憶還是表現?將數字存儲在一個整數中會更有效率,但速度更慢。將每個數字存儲在一個類型中,其大小等於機器上一個字的大小會更快,但效率更低。 – FreeNickname

+1

您可以在結構中使用C的位域。 –

+0

另外,如果列表中可以包含可變數量的項目,則還需要存儲一些項目。由於每個項目需要4位,並且項目的最大數量是16,16 * 4 = 64,因此沒有空間留下多個項目。你需要單獨存儲它。 – FreeNickname

回答

0
+ (NSArray *)arrayFromLongint:(uint32_t)longint { 
    uint8_t shortint; 
    NSMutableArray *array = [[NSMutableArray alloc] init]; 
    for (uint8_t i = 0; i < 32; i = i + 4) { 
     shortint = longint >> i & 15; // 15 is 00001111 in binary 
     [array addObject:[NSNumber numberWithUnsignedShort:shortint]]; 
    } 
    return array; 
} 

+ (uint32_t)longintFromArray:(NSArray *)array { 
    uint8_t shortint, itemIndex = 0; 
    uint32_t longint = 0; 
    NSNumber *item; 
    for (uint8_t i = 0; i < 32; i = i + 4) { 
     if ([[array objectAtIndex:itemIndex] isKindOfClass:[NSNumber class]]) { 
      item = [array objectAtIndex:itemIndex]; 
      shortint = [item unsignedShortValue] & 15; // 15 is 00001111 in binary 
      longint = longint | shortint << i; 
     } 
     itemIndex++; 
    } 
    return longint; 
} 
相關問題