【问题标题】:how to find how many bits exist in a int number and storing each bit in an int array如何查找一个 int 数中存在多少位并将每个位存储在一个 int 数组中
【发布时间】:2021-04-26 07:45:44
【问题描述】:

我有类似int i=10 的东西,它可能是i=1000i=10400233

我喜欢将存储在int i=10//,etc. 中的任意数字的每一位存储在一个数组中。有没有可能在C

我只是不明白如何找到bitsint 变量之间的关系以及其中存储的数字

示例输入

int i=10; // 我想要 int array[]={1,0,1,0};

int i=15; // 我想要 int array[] ={1,1,1,1};

int i=21 // 我想要 int array[] ={1,0,1,0,1};

【问题讨论】:

  • 值为0 的位也是位,因此所有int 将具有相同数量的位(在给定的编译二进制中)。
  • 您能否重新表述和/或澄清问题,因为它不清楚。也许给出一些示例输入的结果。但通常提取位 X 将是 (i >> X) & 1
  • @JoachimSauer 你的意思是它根本不可能,因为没有办法找到多少位代表一个数字。如果我告诉我的系统 printf("%d\n",sizeof(int)); 打印 4
  • 我认为第一条评论是说每个int 值的位数是相同的。它是sizeof(int)*8
  • 所以您希望所有有效位都避免前导零?

标签: c


【解决方案1】:

我只是不明白如何找到位和 int 变量与存储在其中的数字之间的关系

首先,重要的是要了解用于存储int 的位数在所使用的特定系统上是一个固定数字。不同的系统可能使用不同的位数。

但是 ...位数取决于int 持有的值。用于存储int 的位数是系统特定的常量。

你可以像这样指定位数:

printf("int is %zu chars and each char is %d bits so in total %zu bits\n", 
       sizeof(int),              // Chars per int
       CHAR_BIT,                 // Bits per char
       sizeof(int) * CHAR_BIT);  // Bits per int

在我的系统上我得到:

int is 4 chars and each char is 8 bits so in total 32 bits

计算完位数后,您可以创建一个该大小的数组。 VLA(可变长度数组)或动态分配数组(即使用malloc)。

【讨论】:

    【解决方案2】:

    这就是我的系统上 sizeof(int) 为 4 时的完成方式

       #define CHAR_BIT_C 8
        
        int main()
        {
            int i=21;
            
            int t[32];
        
            for(int x=CHAR_BIT_C*sizeof(int)-1;x>=0;x--)
            {
                *(t+x)=i>>x&0b1;
            }
            for(int x=CHAR_BIT_C*sizeof(int)-1;x>=0;x--){
                printf("%d ",*(t+x));
            }
    
            return 0;        
        }
    

    【讨论】:

    • 为什么会有变量j? -- 请将编译器的警告级别提高到最大并处理所有警告和错误。 -- 使用一些空格使您的源代码更具可读性。 -- void main() 不是符合标准的主要功能之一。
    • @thebusybee 如何将 gcc 编译器的警告级别提高到最大?以及如何删除它
    • 嗯,您的第一站应该始终是文档。它可以通过简单的网络搜索以不同的格式提供,甚至是 PDF 格式。其他教程很普遍。 -- 无论如何,至少使用-Wall -Wextra 作为编译命令行的选项。根据您的 IDE 和项目类型,可能会有一个对话框。
    猜你喜欢
    • 2017-10-02
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 2016-11-24
    • 2011-11-19
    • 1970-01-01
    • 2021-07-17
    • 1970-01-01
    相关资源
    最近更新 更多