C#中二进制值移位操作结果异常问题求助
C#二进制字符串移位结果错误的修复
问题概述
我编写了一个C#程序,功能是接收单词并转换为二进制字符串,随后执行左移或右移操作,但移位结果不符合预期。例如输入二进制串:
0111001001101111011000110110101101100101011101001110100
实际移位输出与预期不符。
错误原因
- 二进制转数值导致数据破坏:将长二进制字符串转换为
long类型时,long仅支持64位二进制,超出长度的部分会溢出丢失;同时二进制字符串的前导零会被数值类型忽略,完全破坏了原始二进制结构。 - 混淆数值移位与字符串移位逻辑:程序中使用的
<</>>是数值移位操作,会改变数值大小并自动补零;而需求是对二进制字符串的整体移位(保持长度、移动字符位置),两者逻辑完全不同。
修复方案
直接操作二进制字符串实现移位逻辑,根据需求选择移位规则:
- 左移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
相关产品推荐
相关产品推荐

