C#位操作无法按预期工作

时间:2017-02-19 21:14:23

标签: c#

我有一个示例C#程序,如下所示。

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

namespace Rextester
{
    public class Program
    {
        public static void Main(string[] args)
        {
            //Your code goes here

            byte prot = 1;
            byte media = 3;
            byte type = 7;
            var ProtoMediaType = (byte)(((int)proto << 6) | ((int)media << 6) | ((int)type));
            //m_ProtocolMediaType = 0;
            Console.WriteLine(m_ProtocolMediaType);

        }
    }
}

它也可以在Rextester test code

中找到

我试图以下列方式为一个字节赋值

BIT 7 - 原型 BIT 6:4 - 媒体 比特3:0 - 类型

在上面的代码中,我将proto左移6。我的结果为199

即使我将proto移到7,我也会得到相同的结果。

信封计算后面显示我应该0xb7183

我做错了什么。

1 个答案:

答案 0 :(得分:2)

1&lt;&lt; 6 = 0x001000000

3&lt;&lt; 6 = 0x011000000

7 = 0x000000111

(OR)= 0x011000111 = 199

怎么了?