C#十进制转二进制代码输出错误求助:输入69得11而非1000101
十进制转二进制代码错误分析与修复
你的代码存在几个关键问题,导致输入69只输出"11":
- 拼写错误:
Console.Readline()应该是Console.ReadLine()(注意Line的首字母大写),这个错误会直接导致编译失败,先修正它。 - 循环逻辑错误:第一个循环用
Int32.MaxValue作为起始值,Math.Pow(2, 2147483647)会溢出为无穷大,循环要递减很久才能找到69对应的最高位(2^6=64)。找到后执行break时i=6,但第二个循环里i -= i直接把i置为0,只处理了20这一位,后面的21到2^5位完全没处理,自然缺失了大部分二进制位。 - 数据类型不合理:用
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
相关产品推荐
相关产品推荐

