C#二进制操作

class Program
    {
        static void Main(string[] args)
        {     
            int val1 = 2;
            int val2 = 4;
            Console.WriteLine(ConvertBits(val1).ToString());
            Console.WriteLine(ConvertBits(val2).ToString());
            //二进制or操作
            Console.WriteLine(ConvertBits(val1 | val2).ToString());
            //二进制and操作
            Console.WriteLine(ConvertBits(val1 & val2).ToString());
            //二进制Exclusive or操作两个中只有一个为才是1
            Console.WriteLine(ConvertBits(val1 ^ val2).ToString());
            //移动的位数
            int num = 1;
            //二进制<<左移
            val2 <<= num;
            Console.WriteLine(ConvertBits(val2).ToString());
            //二进制>>右移
            val2 >>= num;
            Console.WriteLine(ConvertBits(val2).ToString());
            Console.ReadKey();
        }
        //将整数转成32位的二进制数
        static StringBuilder ConvertBits(int val)
        {
            //10000000 00000000 00000000 00000000
            int bitMask = 1 << 31;
            StringBuilder bitBuffer = new StringBuilder();
            for (int i = 1; i <= 32; i++)
            {
                //二进制与操作
                //由于bitBuffer是从后加入的所以当二进制遇到bitMask第一位的1才是1;
                //&和&&;|和||的区别C#
                if ((val & bitMask) == 0)
                    bitBuffer.Append("0");
                else
                    bitBuffer.Append("1");
                //将数字转成二进制比且位前移一位
                //简单的例子举几位表示下:3进制0011
                //而上述bitMask:1000
                //与操作:1.比较1000和0011所以是0
                //2.左移一位变成0110;1000与0110还是0
                //3.左移一位变成1100;1000与1100为1;
                //4.左移一位变成1000;1000与1000为1;
                val <<= 1;
                if ((i % 8) == 0)
                    bitBuffer.Append(" ");
            }
            return bitBuffer;
        }
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C# 中,可以使用 BinaryFormatter 类来进行二进制序列化和反序列化操作。下面是一个简单的示例: ```csharp using System; using System.IO; using System.Runtime.Serialization.Formatters.Binary; [Serializable] public class Person { public string Name { get; set; } public int Age { get; set; } } public class Program { static void Main(string[] args) { // 创建一个 Person 对象 Person person = new Person { Name = "Tom", Age = 18 }; // 创建一个 BinaryFormatter 对象 BinaryFormatter formatter = new BinaryFormatter(); // 将 Person 对象序列化为二进制流 MemoryStream stream = new MemoryStream(); formatter.Serialize(stream, person); // 将二进制流反序列化为 Person 对象 stream.Seek(0, SeekOrigin.Begin); Person newPerson = (Person)formatter.Deserialize(stream); // 输出序列化后的 Person 对象的属性值 Console.WriteLine($"Name:{newPerson.Name}, Age:{newPerson.Age}"); } } ``` 在上面的示例中,我们首先创建了一个 Person 类,并将其标记为可序列化(即添加了 `[Serializable]` 属性)。然后,我们在 `Main` 方法中创建了一个 Person 对象,并使用 BinaryFormatter 对象将其序列化为一个 MemoryStream 对象。接着,我们将 MemoryStream 对象的读取位置设置为开头,并使用 BinaryFormatter 对象将其反序列化为一个新的 Person 对象。最后,我们输出新的 Person 对象的属性值。 需要注意的是,BinaryFormatter 类在进行序列化和反序列化时,会将对象的完整类型信息也序列化到二进制流中。因此,在进行反序列化时,需要确保反序列化的对象类型与序列化时的对象类型完全一致,否则会抛出异常。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值