二进制数是什么解决方案V2

时间:2013-02-18 00:33:32

标签: objective-c binary binary-data equation

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

如您所知,Binary只能是1或0

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

我试图找出一个等式或者你可以从一个8位数字得到的最大组合数量

我的意思是......说你有一个两位数的二进制数字,你可以拥有的最大Bnary组合

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个月前才开始学习编程,而且我还有很多教程要经过。

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

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

700比特的文件小于900比特的文件

8位= 1个字节

1024bytes = 1kb

1024kb = 1 mb

我不知道如果它甚至可能但我只是想如果你有一个算法可以一次读取1024位...用等式= 2 ^ 1024 =数学错误:( = =总比特组合数可能的

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

所以从现在开始,每当计算机看到符号#时,它就会识别它等于二进制数000101010010101011001011011010101010140010101101000000001110100101100001010100000 ...... 0011010

更好地理解它......只要想想汽车/车辆上的车牌号码,它们只有几个字符,但是你可以将它们打入警察数据库或任何汽车数据库,更多的信息出现了它的相同原理。 ..

基本上符号是更多数据的关键

我不知道它是否有意义,但理论上如果你能一次读取8388608位

8388608位= 1megabyte ......

十个符号可能意味着10mb ...您可以创建数字媒体2d条形码 它只是一个想法我曾经看过starGate lol:)**

2 个答案:

答案 0 :(得分:4)

2为8的幂,其中8为位数。

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

创建一个将整数显示为二进制

的函数
for (i = 0; i < pow(2,n), i++)
{
    displayBits(i);
}

答案 1 :(得分: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;

>> shifts左侧整数的位与右侧定义的小数位数相同。和& 1 performs a bit wise addition

所以对于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