有谁知道如何解决这个问题?任何帮助都会很棒......我似乎无法理解它。
如您所知,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:)**
答案 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