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

C#中如何实现十进制数16位二进制编码、反转后转新整数

问题需求
  • 接收用户输入的整数n,将其转换为固定16位长度的二进制表示,反转该二进制位序列后,再将反转后的二进制解码为新的十进制整数。
  • 示例:整数14769的16位二进制为0011100110110001(前补2个0凑齐16位),反转后二进制为1000110110011100,解码得到的新整数为36252。
现存问题

原有代码转换二进制时以输入值归0作为循环终止条件,不会自动补充高位前导0,仅得到有效位对应的二进制值11100110110001,因缺少高位的2个0,导致反转时丢失对应位,最终解码整数错误。
原有错误实现代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;

namespace HelloWorld
{
  public class Program
  {
  public static void Main(string[] args)
  {
    long n, n1, p, i, r, sum, inv, inv1, newint;
    Console.WriteLine("give n:");
    n=long.Parse(Console.ReadLine());
    n1=n;
    p=1;
    sum=0;
    i=n;
    // 转换输入为二进制表示
    for(i=n;i!=0;i=i/2)
    {
      r=i%2;
      sum=sum+r*p;
      p=p*10;        
   }

   inv=0;
   // 反转二进制表示
   for(i=sum;i!=0;i=i/10) 
   {
     r=i%10;
     inv=10*inv+r;       
   }

   inv1=inv;
   newint=0;
   p=0;
   // 将反转后的二进制转换为十进制整数
   for(i=inv;i!=0;i=i/10)
   {
     r=i%10;
     newint=newint+r*(long)Math.Pow(2,p);
     p=p+1;
   }
   Console.WriteLine("The number that you gave = {0} \nIts binary 
   representation = {1} \n\nThe inverse binary representation = {2} \nThe integer corresponding to the inverse binary number = {3}", n1, sum, inv1, newint); 
   } 
 }
 }
约束条件
  • 不可使用内置转换函数
  • 不可使用补位方法、Convert类相关转换方法
  • 仅允许使用for循环(尽量不使用while循环)
  • 不允许使用字符串类型,需正确实现16位二进制编码逻辑
实现思路

原有代码的核心错误是所有位处理循环都以数值归0为终止条件,自动丢弃了高位的0。修复逻辑直接对齐16位固定长度要求:所有涉及二进制位处理的环节都固定执行16次循环,无论当前处理的数值是否已经归0,保证高位的0也能参与后续反转、解码计算,全程不使用字符串、内置转换函数,仅通过算术运算和for循环完成逻辑。

正确实现代码
using System;

namespace HelloWorld
{
    public class Program
    {
        public static void Main(string[] args)
        {
            long n, n1, r, originalBin, invBin, newint;
            Console.WriteLine("give n:");
            n = long.Parse(Console.ReadLine());
            n1 = n;
            originalBin = 0;
            invBin = 0;
            newint = 0;
            
            // 初始化反转后最高位的权重2^15,手动乘2计算避免浮点精度问题
            long revBitWeight = 1;
            for (int i = 0; i < 15; i++)
            {
                revBitWeight *= 2;
            }
            long originalBinWeight = 1;

            // 固定循环16次处理所有二进制位,不提前终止
            for (int count = 0; count < 16; count++)
            {
                r = n % 2; // 取当前最低位
                n = n / 2; // 右移一位
                
                // 拼接反转后的二进制十进制表示
                invBin = invBin * 10 + r;
                // 拼接原二进制的十进制表示
                originalBin += r * originalBinWeight;
                originalBinWeight *= 10;
                // 累加反转后当前位对应的十进制值
                newint += r * revBitWeight;
                revBitWeight /= 2;
            }

            Console.WriteLine("The number that you gave = {0} \nIts binary representation = {1} \n\nThe inverse binary representation = {2} \nThe integer corresponding to the inverse binary number = {3}", n1, originalBin, invBin, newint);
        }
    }
}
验证结果

输入14769时,代码输出:

  • 原二进制表示:11100110110001(高位前导0不影响数值存储,计算时已完整参与运算)
  • 反转后二进制表示:1000110110011100
  • 最终解码整数:36252,与示例结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 08:51:32