You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言将32位二进制数逐位存入数组的实现问题排查

代码问题分析

  • 输入溢出:你使用int类型接收用户输入的32位二进制数字串,该串作为十进制数远大于32位int的最大取值(约21亿,仅支持10位十进制数),输入阶段就会发生溢出,存储的数值本身就是错误的。
  • 数组越界:定义的arr[32]合法下标范围为0~31,你的循环变量i从32开始取值,访问arr[32]属于越界内存访问,会产生不可预期的异常结果。
  • 存储逻辑不符合需求:你从输入数值的最低位开始取数,存到数组的高位下标位置,最终32位二进制的最高位不会存储在arr[0],而是存放在下标为32 - 输入长度的位置,和你的预期不符。

修正方案

方案1:以字符串形式处理输入(推荐,匹配你输入二进制串的场景)

直接读取用户输入的二进制字符串,逐字符转换为数字存入数组,完全避免数值溢出问题:

#include <stdio.h>
#include <string.h>

int main ()
{
    // 预留32位字符+1位字符串结束符的空间
    char binary_str[33];
    int arr[32];
    printf("Enter A binary Number:\n");
    // 限制最多输入32位,避免数组溢出
    scanf("%32s", binary_str);
    int input_len = strlen(binary_str);

    for(int i = 0; i < 32; i++){
        // 输入不足32位时高位自动补0,可根据需求调整补位逻辑
        if(i < 32 - input_len){
            arr[i] = 0;
        }else{
            arr[i] = binary_str[i - (32 - input_len)] - '0';
        }
    }
    printf("The first digit is %d", arr[0]);
    return 0;
}

方案2:输入十进制整数,转32位二进制位存入数组

如果你的实际需求是输入一个十进制整数,将其对应的32位二进制位存入数组,arr[0]存储最高位,可以用移位操作实现:

#include <stdio.h>
#include <stdint.h>

int main ()
{
    // 用32位无符号整数存储输入的数值,避免符号位干扰
    uint32_t num;
    int arr[32];
    printf("Enter A decimal Number:\n");
    scanf("%u", &num);

    for(int i = 0; i < 32; i++){
        // 从最高位开始依次取每一位的数值
        arr[i] = (num >> (31 - i)) & 1;
    }
    printf("The first digit (highest bit) is %d", arr[0]);
    return 0;
}

内容的提问来源于stack exchange,提问作者Exx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 03:06:02