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

C#十进制转二进制代码输出错误求助:输入69得11而非1000101

十进制转二进制代码错误分析与修复

你的代码存在几个关键问题,导致输入69只输出"11":

  1. 拼写错误:Console.Readline()应该是Console.ReadLine()(注意Line的首字母大写),这个错误会直接导致编译失败,先修正它。
  2. 循环逻辑错误:第一个循环用Int32.MaxValue作为起始值,Math.Pow(2, 2147483647)会溢出为无穷大,循环要递减很久才能找到69对应的最高位(2^6=64)。找到后执行break时i=6,但第二个循环里i -= i直接把i置为0,只处理了20这一位,后面的21到2^5位完全没处理,自然缺失了大部分二进制位。
  3. 数据类型不合理:用double处理整数运算容易出现精度误差,应该用int这类整数类型。

修正后的代码(保留你的核心逻辑):

int input = int.Parse(Console.ReadLine());
int remaining = input;
int highestBit = 0;

// 先定位最高位的2的幂次
for (int i = 30; i >= 0; i--) // int最大值是2^31-1,遍历到30足够
{
    int power = 1 << i; // 用移位运算替代Math.Pow,更高效且无精度问题
    if (remaining >= power)
    {
        highestBit = i;
        Console.Write("1");
        remaining -= power;
        break;
    }
}

// 遍历处理剩余的低位
for (int i = highestBit - 1; i >= 0; i--)
{
    int power = 1 << i;
    if (remaining >= power)
    {
        Console.Write("1");
        remaining -= power;
    }
    else
    {
        Console.Write("0");
    }
}

Console.ReadKey();

更简洁的实现方式(新手可参考):

如果不需要手动实现位运算逻辑,C#内置了直接转换的方法:

int input = int.Parse(Console.ReadLine());
string binaryStr = Convert.ToString(input, 2);
Console.WriteLine(binaryStr);
Console.ReadKey();

输入69时,以上两种代码都会输出正确的1000101。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 00:57:26