C#中的位操作

  位操作符是对数据按二进制位进行运算的操作符。位操作是其他很多语言都支持的操作,如C、C++和Java等,C#也不例外支持位操作。注意位操作支持的数据类型是基本数据类型,如byte、short、char、int、long等,C#支持的位操作有如下几种:

  按位与 &

  按位或 |

  按位取反 ~

  左移 <<

  右移 >>

  异或^

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

  举例说明:

  using System;

  public class BitAction

  {

  public static void Main(string[] args)

  {

  int[] power = new int[] { 1, 2, 4, 8, 16, 32, 64 };

  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();

  }

  }

时间: 2024-08-04 13:56:49

C#中的位操作的相关文章

Java中的移位操作

Java中的位操作指定包括:& | ~ >> << >>>,前面几个都非常简单,主要是以为操作比较容易出错.1.<<逻辑左移,右边补0,符号位和其他位一样.正数:x<<1一般相当于2x,但是可能溢出.溢出范围: 230~(231-1) 二进制表示 010000...000到01111....1111,移位后最高为变为1了,变成负数了.负数:x<<1一般也相当于2x,也有可能溢出.溢出范围: -231~-(230+1)二进

经典算法(12) 数组中只出现1次的两个数字(百度面试题)

首先来看题目要求: 在一个数组中除两个数字只出现1次外,其它数字都出现了2次, 要求尽快找 出这两个数字. 考虑下这个题目的简化版--数组中除一个数字只出现1次外,其它数字都成对出现 ,要求尽快找出这个数字.这个题目在之前的<位操作基础篇之位操作全面总结>中的"位操作趣味应用" 中就已经给出解答了.根据异或运算的特点,直接异或一次就可以找出这个数字. 现在数组中有两个 数字只出现1次,直接异或一次只能得到这两个数字的异或结果,但光从这个结果肯定无法得到这个两个数字 .因此我

java位操作

Java中的位操作指定包括: ~ 按位非(NOT) & 按位与(AND) | 按位或(OR) ^ 按位异或(XOR) >> 右移 >>> 无符号右移 <<左移 前面几个都非常简单,主要是移位操作比较容易出错. 首先要搞清楚参与运算的数的位数,如int的是32位.long的是64位. 如int i = 1; i的二进制原码表示为: 00000000000000000000000000000001 long l = 1; l的二进制原码表示为: 0000000

Linux中awk内建数学函数之左移运算、右移运算、按位取反运算

程序设计中,位操作运算符的一种.在c++中,移位运算符有双目移位运算符:<<(左移)和>>(右移).移位运算符组成的表达式也属于算术表达式,其值为算术值.左移运算是将一个二进制位的操作数按指定移动的位数向左移位,移出位被丢弃,右边的空位一律补0.右移运算是将一个二进制位的操作数按指定移动的位数向右移动,移出位被丢弃,左边移出的空位或者一律补0,或者补符号位,这由不同的机器而定.在使用补码作为机器数的机器中,正数的符号位为0,负数的符号位为1. 在移位运算时,byte.short和c

ASP实现IP地址分段计算

ip地址|ip地址 <script language="JScript" Runat="Server">   function IPDeCode(EIP){   var Ip1,Ip2,Ip3,Ip4;   Ip1 = moveByteR(EIP & 0xff000000,3);   Ip2 = moveByteR(EIP & 0x00ff0000,2);   Ip3 = moveByteR(EIP & 0x0000ff00,1)

IP地址分段计算

ip地址 /* written by Jaron ,2000-01-10 *//* 原出处:江都资讯网 http://www.jiangdu.net *//* 转载请注明出处和保留此版权信息 *//* 欢迎使用SiteManager网站管理系统 http://sitemanager.cnzone.net *//*相关文章:http://www.csdn.net/Develop/read_article.asp?id=19652*/<script language="JScript"

ASP ,IP地址分段计算

ip地址 <script language="JScript" Runat="Server"> function IPDeCode(EIP){ var Ip1,Ip2,Ip3,Ip4; Ip1 = moveByteR(EIP & 0xff000000,3); Ip2 = moveByteR(EIP & 0x00ff0000,2); Ip3 = moveByteR(EIP & 0x0000ff00,1); Ip4 = EIP &am

JavaScript按位运算符的应用简析

 下面根据自己的认知简单的谈一下js中的位操作使用(同样适用于其他语言),如果有错误,欢迎指正 大多数语言都提供了按位运算符,按位运算符在c,c++等语言中运用广泛,而在JS,AS等脚本语言中则没有太多的应用例子,有时候,适当的使用按位运算符会取得很好的效果. 下面根据自己的认知简单的谈一下js中的位操作使用(同样适用于其他语言),如果有错误,欢迎指正.   按位运算符是把操作数看作一系列单独的位,而不是一个数字值.所以在这之前,不得不提到什么是"位": 数值或字符在内存内都是被存储为

Linux中断处理“下半部”机制

转载自http://blog.csdn.net/myarrow/article/details/9287169 1. 中断处理"下半部"机制        中断服务程序一般都是在中断请求关闭的条件下执行的,以避免嵌套而使中断控制复杂化.但是,中断是一个随机事件,它随时会到来,如果关中断的时间太长,CPU就不能及时响应其他的中断请求,从而造成中断的丢失.        因此,Linux内核的目标就是尽可能快的处理完中断请求,尽其所能把更多的处理向后推迟.例如,假设一个数据块已经达到了网线