以下是优化后的二进制转十进制代码,主要从算法效率、类型范围和代码简洁性三个方面进行了改进:

主要优化点说明:

  1. 算法效率提升
  • 移除了Math.Pow的使用(浮点运算开销大),改用位运算<< 1(左移1位等价于×2)和按位或|,运算效率显著提高
  • 采用累加器模式,一次遍历完成计算,时间复杂度保持O(n)但常数项大幅降低
  1. 范围扩展
  • 使用long类型替代int,支持最长63位的二进制数(含符号位),转换范围扩大到±9,223,372,036,854,775,807
  1. 代码精简
  • 合并了计算逻辑,减少中间变量
  • 验证逻辑早期退出,避免不必要的循环
  • 用字符ASCII码运算binary[i] - '0'替代int.Parse,减少类型转换开销
  1. 保持健壮性
  • 依然严格验证输入格式
  • 正确处理负数情况
  • 边缘 case(如"0"、"1"等)处理更清晰

对于超长二进制数(超过64位),可以进一步改为使用BigInteger类型,但会牺牲一定性能。当前版本在保持高性能的同时,已经能满足绝大多数日常使用场景。

using System;class OptimizedBinaryToDecimal
{static void Main(){Console.WriteLine("二进制转十进制转换器(优化版)");Console.WriteLine("---------------------------");Console.Write("请输入二进制数: ");string binary = Console.ReadLine()?.Trim();if (IsValidBinary(binary)){// 优化:使用long支持更大范围的二进制数long result = BinaryToDecimal(binary);Console.WriteLine($"转换结果: {result}");}else{Console.WriteLine("无效的二进制数!仅允许0、1和可选的前导负号。");}Console.WriteLine("\n按任意键退出...");Console.ReadKey();}/// <summary>/// 验证二进制字符串有效性(优化版)/// </summary>static bool IsValidBinary(string binary){if (string.IsNullOrEmpty(binary))return false;int start = binary[0] == '-' ? 1 : 0;// 二进制数至少需要1位有效数字if (start >= binary.Length)return false;// 只检查必要的字符,早期退出for (int i = start; i < binary.Length; i++){if (binary[i] != '0' && binary[i] != '1')return false;}return true;}/// <summary>/// 二进制转十进制(高效算法)/// 优化点:移除Math.Pow,改用位运算和累加器提升性能/// </summary>static long BinaryToDecimal(string binary){bool isNegative = binary[0] == '-';int startIndex = isNegative ? 1 : 0;long result = 0;// 高效算法:每一步左移1位(相当于×2)再加上当前位值for (int i = startIndex; i < binary.Length; i++){// 位运算替代乘法:result = result * 2 + (当前位值)result = (result << 1) | (binary[i] - '0');}return isNegative ? -result : result;}
}