-5

有谁知道我该如何解决这个问题?任何帮助都会很棒......我似乎无法理解它。

如您所知,二进制只能是 1 或 0

假设您有一个 8 位二进制数,例如字节 >>>>>> 0001 1000

我试图找出一个方程式,或者你可以从一个 8 位数字中获得的最大组合数量是多少

我的意思是....假设您有一个两位二进制数,您可以拥有的最大二进制数组合是

00

01

10

11
因此,2 位二进制数的最大组合总数 = 4

示例 2

如果您有 3 位数字,则最大二进制组合为

000

001

010

100

101

111

110

011
因此,来自 3 位数字的总最大二进制组合 = 8

示例 3

如果它是一个 4 位数字,那么您可以拥有的最大二进制组合是

0000

0001

0010

0100

1000

0111

0110

1111

1110

1101

1011

1001 总最大组合 = 12

我最近问了这个问题,并得到了回答,谢谢 manu-fatto 和 zgnilec,他们很友好地让我知道这是一个简单的方程式,答案/方程式是 2 ^ 数字大小。

我想我的下一个问题是如何编写一个可以在 Xcode 或 NSLog 中显示这些组合的小程序。我对目标 C 很好,我可以像 NSLog 一样查看的输出会很棒。

我所知道的是它看起来像:

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 个月前才开始学习编程,语言模糊,我还有很多教程要学习。

**我正在尝试构建数据压缩算法...

基本上数据压缩是关于减少位数......位数越少文件越小

IE

700bits 文件比 900bits 文件小

8 位 = 1 个字节

1024 字节 = 1kb

1024kb = 1 mb

我不知道它是否可能,但我只是想如果你有一个可以一次读取 1024 位的算法...用方程 thats = 2^1024 = 数学错误:( == 可能的位组合总数

获得组合总数后,您可以将每个组合设置为一个符号,例如 000101010010101011001011011010101010140010101101000000001110100101100001010100000......0011010 = 符号#

所以从现在开始,只要计算机看到符号#,它就识别它等于二进制数0001010100101010110010110110101010101400101011010000000001110100101100001010100000......0011010

为了更好地理解它……想想汽车/车辆上的车牌,它们只是几个字符,但是当你将它们打入警察数据库或任何汽车数据库时,更多信息就会出现其相同的原理……

基本上这些符号是获取更多数据的关键

我不知道这是否有意义,但......理论上你是否可以一次读取 8388608 位

8388608 位 = 1 兆字节......

十个符号可能意味着 10mb...您可以创建数字媒体二维条码,这只是我在观看 starGate 时的一个想法,哈哈 :)**

4

2 回答 2

4

2 的 8 次方,其中 8 是位数。

编辑-只阅读第一个问题:)

创建将整数显示为二进制的函数

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 并在内部 for 循环中对 n 位中的每个 j 运行,以检查最小位是否为 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 回答