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

C#中二进制值移位操作结果异常问题求助

C#二进制字符串移位结果错误的修复

问题概述

我编写了一个C#程序,功能是接收单词并转换为二进制字符串,随后执行左移或右移操作,但移位结果不符合预期。例如输入二进制串:

0111001001101111011000110110101101100101011101001110100

实际移位输出与预期不符。

错误原因

  1. 二进制转数值导致数据破坏:将长二进制字符串转换为long类型时,long仅支持64位二进制,超出长度的部分会溢出丢失;同时二进制字符串的前导零会被数值类型忽略,完全破坏了原始二进制结构。
  2. 混淆数值移位与字符串移位逻辑:程序中使用的<</>>是数值移位操作,会改变数值大小并自动补零;而需求是对二进制字符串的整体移位(保持长度、移动字符位置),两者逻辑完全不同。

修复方案

直接操作二进制字符串实现移位逻辑,根据需求选择移位规则:

  • 左移n位:移除字符串前n位,末尾补n个0
  • 右移n位:移除字符串末尾n位,开头补n个0

修复后的完整代码:

using System;
using System.Text;

namespace mysecondproject
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Pls enter a word: ");
            string word = Console.ReadLine();
            byte[] byteArray = Encoding.UTF8.GetBytes(word);
            
            string wordinbinary = "";
            foreach (byte b in byteArray)
            {
                // 每个字节转8位二进制,保留前导零
                wordinbinary += Convert.ToString(b, 2).PadLeft(8, '0');
            }
            Console.WriteLine("原始二进制字符串: " + wordinbinary);

            Console.Write("\npls enter the key: ");
            int key = int.Parse(Console.ReadLine());

            Console.WriteLine("pls choose do you want to shift the word to the left or to the right. left / right");
            string answer = Console.ReadLine().Trim().ToLower();
            
            string shiftedBinary = "";
            if (answer == "left")
            {
                // 左移key位:移除前key位,末尾补key个0
                shiftedBinary = key >= wordinbinary.Length 
                    ? new string('0', wordinbinary.Length) 
                    : wordinbinary.Substring(key) + new string('0', key);
            }
            else if (answer == "right")
            {
                // 右移key位:移除末尾key位,开头补key个0
                shiftedBinary = key >= wordinbinary.Length 
                    ? new string('0', wordinbinary.Length) 
                    : new string('0', key) + wordinbinary.Substring(0, wordinbinary.Length - key);
            }
            else
            {
                Console.WriteLine("无效选择");
                return;
            }

            Console.WriteLine("移位后二进制字符串: " + shiftedBinary);
        }
    }
}

额外说明

  • 修复了原始代码中循环重复输出二进制串的问题,现在只输出最终完整的二进制结果
  • 增加了边界处理:当移位位数大于等于字符串长度时,直接返回全零串(若需要循环移位,可将补零逻辑改为拼接被移除的部分)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 21:40:31