2011-08-01 2 views
0

ランダム80ビットの番号を使用するiOS用のアプリケーションを作成したいと思いますが、現在のハードウェアではそれほど大きな数字を処理できないことは事実です。番号を小さなものに分割するにはどうすればよいでしょうか?これまでのところ私が考えることのできる最高のものは、それを4つの20ビットブロックに分割することですが、それをどのように処理するプロセッサ容量がどれくらいかかりますと私は満足していません。あなたが私に与えることができる何か助けをありがとう。大きな数字をiOSで管理しやすい部分に分割するにはどうすればよいですか?

+3

あなたはその数をどうしたいですか? – omz

+0

ここで整数を話していると思いますか? –

+0

私はキノアプリケーションを作成しようとしています。キノは80個の数字(1〜80)の配列を特徴としています。私の考えは、2進数でボードを表現することです。ここで、0はそれぞれ「数」が選択されていないことを意味し、各1はそれを意味します。 20個の乱数を生成し、それぞれを20個までのユーザーが選択した数の別のセットと比較するよりも、これが大幅に速くなると思います。 – 1every

答えて

0

2つのintとshortはどうですか? 32 + 32 + 16 = 80ビットになります。あなたが何をしようとしているのかは分かりませんが、現時点ではプロセッサの容量については心配していません。

0

その数値で計算したい場合は、自分で開発する代わりにGMPなどの既存のライブラリを使用する方がよいでしょう。ハッシュ、暗号鍵などのように使用されている場合は、NSDataまたは生のバイト配列を使用する必要があります。

0

mallocの80ブールクラスのクラスを作ることは十分効率的ではないでしょうか? BOOL型はすでに "真/偽"であり、余分なメモリオーバーヘッドは最小限の懸念事項であり、ハードコードされた2〜3の文字列のメモリに相当します。私は、以下の例のためにしようとするでしょう:

UN-テストされたコード:

@interface KenoBoard : NSObject{ 

    BOOL * boardSelections; 

} 

-(BOOL)selectionForPosition:(int)number; 
-(void)setSelection:(BOOL)selection forPosition:(int)number; 

@end 

@implementation KenoBoard 

-(id)init{ 
    if(self = [super init]){ 
     boardSelections = calloc(80*sizeof(BOOL)); 
    } 
    return self; 
} 

-(void)dealloc{ 
    free(boardSelections); 
    [super dealloc]; 
} 

-(BOOL)selectionForPosition:(int)number{ 
    if (number >= 80){ 
     ...make a NSException here 
     @throw exception 
    } 
    return boardSelections[number]; 
} 

-(void)setSelection:(BOOL)selection forPosition:(int)number{ 
    if (number >= 80){ 
     ...make a NSException here 
     @throw exception 
    } 
    boardSelections[number] = selection; 
} 

@end 
+0

BOOLは実際の言語のネイティブタイプではないため、BOOLは1ビットではなく、objc.hで として定義されています。 typedef signed char BOOL; –

+0

ありがとう@Nathan、更新しました。そのメモでは、Cのためのネイティブの1ビットのブール値に関するリファレンスがありますか?私は1つを見つけることができませんでした。 –

+0

実際にはstructのフィールドのビット数を指定することができます。例えば、struct foo {int a:2; int b:1; int c:4; } –

関連する問題