【问题标题】:Binary Numbers what is the solution V2 [closed]二进制数什么是解决方案 V2 [关闭]
【发布时间】:2013-02-02 09:12:36
【问题描述】:

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

如你所知,二进制只能是 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^digit 大小。

我想我的下一个问题是如何编写一个可以在 Xcode 或 NSLog 中显示这些组合的小程序。我很擅长 Objective 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 个月前才开始学习编程,语言模糊,我还有很多教程要学习。

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

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

700bits 的文件比 900bits 的文件小

8 位 = 1 个字节

1024 字节 = 1kb

1024kb = 1 mb

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

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

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

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

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

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

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

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

【问题讨论】:

    标签: objective-c binary binary-data equation


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      快速实现

      #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 &gt;&gt; j) &amp; 1;

      &gt;&gt; shifts 左侧整数的位数与右侧定义的小数位数相同。和&amp; 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
      

      【讨论】:

      • 感谢 Vikingosegundo 我会尝试构建程序 tonite ;) 我希望它编译时没有问题或错误
      • 和?它编译和运行没有问题和错误吗?
      • 你做了什么?它在这里工作正常。
      • 我在 github 上发布了我的完整项目:github.com/vikingosegundo/binarystring
      • 我不明白你为什么要保存任何东西。这只是整数的字符串表示,需要时计算一个特定的。
      猜你喜欢
      • 1970-01-01
      • 2014-04-13
      • 2011-08-07
      • 2011-10-09
      • 2018-04-02
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      相关资源
      最近更新 更多