-5

この問題を解決する方法を知っている人はいますか? どんな助けでも素晴らしいでしょう......私はそれについて頭を悩ませているようです。

ご存じのように、バイナリは 1 または 0 のいずれかしかありません

バイトのような 8 桁の 2 進数があるとします >>>>>> 0001 1000

方程式を解こうとしている、または 8 桁の数字から得られる組み合わせの最大数は何か

つまり.... 2 桁の 2 進数を持っていたとします。2 進数の最大の組み合わせは、

00

01

10

11
したがって、2 桁の 2 進数からの最大組み合わせの合計 = 4

例 2

3 桁の数字の場合、バイナリの組み合わせの最大数は

000

001

010

100

101

111

110

011
したがって、3 桁の数字からの最大バイナリ組み合わせの合計 = 8

例 3

4 桁の数字の場合、可能な最大の 2 進数の組み合わせは次のいずれかです。

0000

0001

0010

0100

1000

0111

0110

1111

1110

1101

1011

1001 合計最大組み合わせ = 12

私は最近この質問をしました.manu-fattoとzgnilecに感謝します.彼らは親切にも答え/方程式が2^桁のサイズの単純な方程式であることを教えてくれました.

私の次の問題は、これらの組み合わせを Xcode または NSLog で表示できる小さなプログラムをどのように作成するかということだと思います。私は NSLog のように表示できる客観的な C を得意としています。

私が知っているのは、次のようになることだけです。

int DigitSize=8
int CombinationTotal = 2^8
CombinationSize = NSMutableArray  ArraywithCapacity 8;

出力

NSString  Combination1 =@"0000 0000";
NSString  Combination2 =@"0000 0001";
NSString  Combination3 =@"0000 0010";

Nslog @"combination 1 = %@  ,Combination1";
Nslog @"combination 2 = %@  ,Combination2";
Nslog @"combination 3 = %@  ,Combination3";

……

Nslog @"combination 256 = ???? ???? ";

3 か月前にプログラミングの学習を始めたばかりで、まだ多くのチュートリアルが残っています。

**データ圧縮アルゴリズムを構築しようとしています...

基本的にデータ圧縮はビット数を減らすことです...ビットが少ないほどファイルは小さくなります

すなわち

700 ビットのファイルは 900 ビットのファイルより小さい

8 ビット = 1 バイト

1024 バイト = 1kb

1024KB = 1MB

可能かどうかはわかりませんが、一度に1024ビットを読み取ることができるアルゴリズムがあればどうなるかを考えました...式 thats = 2^1024 = math error :( == 可能なビットの組み合わせの総数

組み合わせの総数を取得したら、各組み合わせを次のようなシンボルに設定します。

したがって、これ以降、コンピューターが記号 # を見るたびに、それが 2 進数 000101010010101011001011011010101010140010101101000000001110100101100001010100000......0011010 と等しいことを認識します。

それをよりよく理解するために...車/車両のナンバープレートを考えてみてください。それらはほんの数文字ですが、警察のデータベースや車のデータベースにそれらを打ち込むと、同じ原理でより多くの情報が得られます....

基本的にシンボルはより多くのデータへの鍵です

意味があるかどうかはわかりませんが...理論的には、一度に8388608ビットを読み取ることができれば

8388608ビット=1メガバイト……

10 個のシンボルは 10 MB を意味する可能性があります... デジタル メディアの 2D バーコードを作成できます。

4

2 に答える 2

4

2 の 8 乗 (8 は桁数)。

編集-最初の質問のみを読んでください:)

整数をバイナリとして表示する create 関数

for (i = 0; i < pow(2,n), i++)
{
    displayBits(i);
}
于 2013-02-18T00:35:03.693 に答える
1

迅速な実装

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        NSUInteger length = 8;  // number of digits
        NSUInteger n = pow(2, length); // number of possible values
        for (int i = 0; i < n; i++) {
            NSString *repr = @"" ;
            for (int j = 0; j < length; ++j) {
                if([repr length] % 5 == 0)
                    repr = [@" " stringByAppendingString:repr]; // add a blank after evey 4th digit
                int x =( i >> j) &1;
                repr = [[NSString stringWithFormat:@"%u",x] stringByAppendingString:repr];
            }
            NSLog(@"%@", repr);                
        }
    }
    return 0;
}

出力

0000 0000 
0000 0001 
0000 0010 
0000 0011 
0000 0100 
0000 0101 
0000 0110 
0000 0111 
0000 1000 
0000 1001 
0000 1010 
0000 1011 
0000 1100 
0000 1101 
0000 1110 
0000 1111 
0001 0000 
…
1110 1100 
1110 1101 
1110 1110 
1110 1111 
1111 0000 
1111 0001 
1111 0010 
1111 0011 
1111 0100 
1111 0101 
1111 0110 
1111 0111 
1111 1000 
1111 1001 
1111 1010 
1111 1011 
1111 1100 
1111 1101 
1111 1110 
1111 1111 

このプログラムのコアは次のとおりです。

for (int i = 0; i < n; i++) {
    //…
    for (int j = 0; j < length; ++j) {
        int x =( i >> j) &1;
        //…
    }
}

これは i =0 bis (2^n)-1 に対して実行され、n ビットの j ごとに内側の for ループで実行され、最小ビットが 1 であるかどうかを確認し、それを表現文字列に追加します。

あなたは初心者なので、おそらくこれが何を意味するのか分からないでしょう:int x =( i >> j) & 1;

>>は、左側の整数のビットを、右側で定義されている小数点以下の桁数だけシフトします。少し賢明な加算を実行します& 1

したがって、i == 3 および n == 8 の場合

       3 as binary                         string representation
j = 0: 00000011 >> 0 ->  0000 0011 
                        &0000 0001
                        -----------
                        00000 0001 -> 1     repr = 1

j = 1: 00000011 >> 1 ->   000 0001 
                        &0000 0001
                        -----------
                        00000 0001 -> 1     repr = 11

j = 2: 00000011 >> 2 ->    00 0000
                        &0000 0001
                        -----------
                        00000 0000 -> 0     repr = 011

j = 3: 00000011 >> 3 ->     0 0000 
                        &0000 0001
                        -----------
                        00000 0000 -> 0     repr = 0011

  (the same till j = 7)                     repr = 0000 0011
于 2013-02-18T02:07:50.473 に答える