zoukankan      html  css  js  c++  java
  • C# 位操作

    位操作符是对数据按二进制位进行运算的操作符。位操作是其他很多语言都支持的操作,如C、C++和Java等,C#也不例外支持位操作。注意位操作支持的数据类型是基本数据类型,如byte、short、char、int、long等,C#支持的位操作有如下几种:
    · 按位与 & 
    · 按位或 | 
    · 按位取反 ~ 
    · 左移 << 
    · 右移 >>
    · 异或^

    在C#中位操作同C的位操作没有什么区别,位操作的速度相对较快,而且如果熟练的话,处理起来也相对方便,特别是在一些权限等相关的设置中,比如:用1、2、4、8、16、32、64分别代表查看、添加、编辑、修改、删除、审批等权限值的时候,如果某个用户的最终权限是多种权限值的叠加,用位操作来判断是否具有某种权限是相当方便的了。

     

    using System;
    /*
     * 作者:周公
     * 说明:本程序用以说明在C#中如何进行位操作。
     * 日期:2007-09-17
     * 
    */

    public class BitAction
    {
        
    public static void Main(string[] args)
        
    {
            
    int[] power = new int[] 1248163264 };
            
    int value = 126;
            
    /*
             * 1的二进制形式:  00000001
             * 2的二进制形式:  00000010
             * 4的二进制形式:  00000100
             * 8的二进制形式:  00001000
             * 16的二进制形式: 00010000
             * 32的二进制形式: 00100000
             * 64的二进制形式: 01000000
             * 126的二进制形式:01111110
             
    */

            
    for (int i = 0; i < power.Length; i++)
            
    {
                
    if ((value & power[i]) != 0)
                
    {
                    Console.WriteLine(
    "有power[{0}]={1}所代表的权限", i, power[i]);
                }

            }

            Console.WriteLine(
    "按位与:126&4={0}", value & 4);
            Console.WriteLine(
    "按位或:126|4={0}", value | 4);
            Console.WriteLine(
    "左移:126<<4={0}", value << 4);
            Console.WriteLine(
    "右移:126>>4={0}", value & 4);
            Console.WriteLine(
    "异或:126^4={0}", value ^ 4);
            Console.WriteLine(
    "按位取反:~126={0}"~value);
            Console.ReadLine();
        }

    }

    运行结果:

     


    //举例说明
    using System;
    class MikeCat
    {
    public static void Main()
    {
    int a=6&3;
    Console.WriteLine(
    "a={0}",a);
    //6的二进制是00000110,3的二进制是00000011,按位与后等于00000010,  即2。
        
    int b=6|3;
    Console.WriteLine(
    "b={0}",b);
    //6的二进制是00000110,3的二进制是00000011,按位或后等于00000111,即7

    int c=~6;
    Console.WriteLine(
    "c={0}",c);
    //6的二进制是00000110,按位取反后是11111001即-7

    int d=6^3;
    Console.WriteLine(
    "d={0}",d);
    //6的二进制是00000110,3的二进制是00000011,按位异或后等于00000101,即5

    int e=6<<3;
    Console.WriteLine(
    "e={0}",e);
    //6的二进制是00000110,左移三位后等于00101000,即48

    int f=6>>2;
    Console.WriteLine(
    "f={0}",f);
    //6的二进制是00000110,右移二位等于00000001,即1
      }

    }
     
  • 相关阅读:
    牛客网分糖果
    【bzoj3717】[PA2014]Pakowanie 状压dp
    【bzoj1042】[HAOI2008]硬币购物 背包dp+容斥原理
    [POI2007]堆积木Klo
    【bzoj5018】[Snoi2017]英雄联盟 背包dp
    BZOJ 1492 [NOI2007]
    bzoj 2741 [FOTILE模拟赛] L
    bzoj 1486 最小圈
    计数
    cf 700
  • 原文地址:https://www.cnblogs.com/top5/p/1948245.html
Copyright © 2011-2022 走看看