C# 对位的操作

 

需求 一个byte 中第0-4位分别代表不同的业务,一个byte是8位,怎么读取和设置位

设置位

设置Byte 中的位,00000000,对于位只有0 和 1  ,这个是组合方式

设置值到位里面,思路就是先找到具体的位通过左移,
     //处理日志等级
            byte levRes =0;
            if (ErrLevel == true)
            {
               // 第0位左移1位
               byte errValue= 1 << 0;
                levRes = (byte)(levRes + errValue);
            }
            if (CenterLevel == true)
            {
               // 第1位左移1位
                byte cValue = 1 << 1;
                levRes = (byte)(levRes + cValue);
            }
            if (WarmLevel == true)
            {
              // 第2位左移1位
                byte warnValue = 1 << 2;
                levRes = (byte)(levRes + warnValue);
            }
            if (InfoLevel == true)
            {
                byte infoValue = 1 << 3;
                levRes = (byte)(levRes + infoValue);
            }
            if (DebugLevel == true)
            {
                byte debugValue = 1 << 4;
                levRes = (byte)(levRes + debugValue);
            }

读取位

读取 从一个byte 中读取每一个位是否为1 ,一个byte 有8个位
先通过左移找到这个位,然后和原来的byte& 就可以知道当前位是否是1 

  //  日志等级
            for (int i = 0; i <= 7; i++)
            {
                // 定位到第几位
                byte val = (byte)(1 << i);
               // 第几位与原始&可以知道当前是否
                bool isvaluie = (val & logLeverl) != 0;

                if (i == 0 && isvaluie)
                {
                    ErrLevel = true;
                }
                else if (i == 1 && isvaluie)
                {
                    CenterLevel = true;
                }
                else if(i == 2 && isvaluie)
                {
                    WarmLevel = true;
                }
                else if (i == 3 && isvaluie)
                {
                    InfoLevel = true;
                }
                else if(i == 4 && isvaluie)
                {
                    DebugLevel = true;
                }
        }

备注: 如果你要对int 设置位,一样的逻辑

 

   int a = 0b111111;
            Console.WriteLine(a);
            // 10进制 转成   2  8  16
            int sum = 160;
            Debug.WriteLine(Convert.ToString(sum, 2));
            Debug.WriteLine(Convert.ToString(sum, 8));
            Debug.WriteLine(Convert.ToString(sum, 16));


            // 2  8  16  转成10进制
            Debug.WriteLine(Convert.ToInt32("11", 2));
            Debug.WriteLine(Convert.ToInt32("11", 8));
            Debug.WriteLine(Convert.ToInt32("11", 16));

  

 

posted @ 2024-07-15 15:26  陌念  阅读(38)  评论(0)    收藏  举报