C#的位运算符&,| ,^ ,<<,>>2008年08月01日 星期五 15:52位 运 算
我们知道任何信息在计算机中都是以二进制的形式保存的位操作符就是对数
据按二进制位进行运算的操作符C#语言中的位操作符有

 & 与
| 或
^ 异或
~ 取补
<< 左移
>> 右移

其中取补只有一个操作数而其它的位操作符都有两个操作数这些运算都不
会产生溢出位操作符的操作数为整型或者是可以转换为整型的任何其它类型
与运算
操作数按二进制位进行与运算运算规则为
0&0=0
0&1=0
1&0=0
1&1=1
这说明除了两个位均为1 与运算结果为1 其它情况下与运算结果均为0 比
如2 和10 进行与运算
2 的二进制表示 00000010
10 的二进制表示 00001010
与运算的结果 00000010
1 所以2&10 的结果为2
或运算
操作数按二进制位进行与运算运算规则为
0|0=0
0|1=1
1|0=1
1|1=1
这说明除了两个位均为0 或运算结果为0 其它情况下或运算结果均为1 比
如2 和10 进行或运算
2 的二进制表示 00000010
10 的二进制表示 00001010
或运算的结果 00001010
所以2|10 的结果为10
异或运算
操作数按二进制位进行与运算运算规则为
0^0=0
0^1=0
1^0=0
1^1=1
这说明当两个位相同时异或运算结果为0 不相同时异或运算结果为1 比如
2 和10 进行异或运算
2 的二进制表示 00000010
10 的二进制表示 00001010
异或运算的结果 00001000
所以2^10 的结果为8
取补运算
取补运算对操作数的每一位取补如对10 取补结果为
10 的二进制表示 00001010
与运算的结果 11110101
这个二进制对应的具体值与数据类型有关下面的例子清楚地说明了这一点
程序清单7-5

using System;
class Test
{
public static void Main() {
short a = ;
ushort b = ;
int c = ;
uint d = ;
Console.WriteLine(~);
Console.WriteLine("short: {0}",~a);
Console.WriteLine("ushort: {0}",~b);
Console.WriteLine("int: {0}",~c);
Console.WriteLine("uint: {0}",~d);
}
}

正确的输出是
-11
short: -11
ushort: -11
int: -11
uint: 4294967285
移位运算
左移运算将操作数按位左移高位被丢弃低位顺序补0 比如10 的二进制为
00001010 左移一位为00010100 20 左移二位为00101000 40
右移运算时如果操作数x 是int 或long 型 时x 的低位被丢弃其它各位顺序
依次右移如果x 是非负数最高位设成零如果x 为负数则最高位设为1 而当x
的类型为uint 或ulong 型时x 的低位将被丢弃其它各位顺序依次右移高位设为0
比如
程序清单7-6

using System;
class Test
{
public static void Main() {
int x = ;
Console.WriteLine(x);
int y = x>>;
Console.WriteLine(y);
y = y>>;
Console.WriteLine(y);
y = y>>;
Console.WriteLine(y);
}
}

上面这段程序的输出为
16
4
1
0
如果把上面x 的初始值设为-16 则程序的输出为
-16
-4
-1
-1

C#的位运算符的更多相关文章

  1. java的布尔运算符和位运算符

    1.布尔运算符 &&  逻辑与: ||   逻辑或: !=  不等于: 三元操作符:?: :表达式为  condition?expression1:expression2(当条件为真时 ...

  2. c 语言的位运算符复习

    转载和修正,原文连接:http://www.cnblogs.com/911/archive/2008/05/20/1203477.html 位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进 ...

  3. Java的算数运算符、关系运算符、逻辑运算符、位运算符

    JAVA的运算符,分为四类: 算数运算符.关系运算符.逻辑运算符.位运算符 算数运算符(9):+  -  *  /  %  ++  -- 关系运算符(6):==  !=  >  >=  & ...

  4. c语言基础表达式, 关系运算符, 逻辑运算符, 位运算符, 数据的取值范围, 分支结构(if...else, switch...case)

    1.表达式: 表达式的判断是有无结果(值), 最简单的表达式是一个常量或变量, 如:12, a, 3 + 1, a + b, a + 5 都是表达式 2.BOOL(布尔)数据类型: c语言中除了基本数 ...

  5. PHP中的运算符---位运算符、递增递减运算符、三元运算符、字符串运算符、数组运算符、类型运算符、错误控制运算符

    1.位运算符 位运算符用来对整型数的指定位进行置位,如果被操作数是字符串,则对该字符串的ASCII码值进行操作. 运算类型 运算符 举例 结果 按位与 & $a & $b 将$a 与 ...

  6. ECMAScript 位运算符

    位运算符是在数字底层(即表示数字的 32 个数位)进行操作的. 重温整数 ECMAScript 整数有两种类型,即有符号整数(允许用正数和负数)和无符号整数(只允许用正数).在 ECMAScript ...

  7. javascript运算符——位运算符

    × 目录 [1]二进制 [2]非 [3]与[4]或[5]异或[6]左移[7]右移[8]>>>[9]应用 前面的话 位运算符是非常底层的运算,由于其很不直观,所以并不常用.但是,其速度 ...

  8. PHP中为位运算符(几乎很少用)

    PHP语言里的位运算符&.|.^ .~.〈〈 .〉〉 "&" 按位与运算 按位与运算符"&"是双目运算符.其功能是参与运算的两数各对应的 ...

  9. PHP运算符:算数运算符、逻辑运算符、三目运算符、位运算符、字符串运算符。

    赋值运算符 PHP 赋值运算符用于向变量写值. PHP 中基础的赋值运算符是 "=". 这意味着右侧复制表达式会为左侧运算数设置值. _______________________ ...

  10. Java的位运算符详解实例——与(&)、非(~)、或(|)、异或(^)

    位运算符主要针对二进制,它包括了:“与”.“非”.“或”.“异或”.从表面上看似乎有点像逻辑运算符,但逻辑运算符是针对两个关系运算符来进行逻辑运算,而位运算符主要针对两个二进制数的位进行逻辑运算.下面 ...

随机推荐

  1. itext poi 学习之旅 (3)读取数据库信息并由excel展现出来

    DBConnection.java 连接数据库操作 package com.zkbj.poi; import java.sql.Connection; import java.sql.DriverMa ...

  2. c++回调实现

    回调是A将一个函数指针传给B,然后调用B,B在执行自身函数后,再在合适的时候执行A的这个函数指针,这样就能避免A和B的相互包含和链接,在大型项目中回调是一种打破循环依赖的常用技术. typedef v ...

  3. CentOS 5.5安装图解教程

    说明:实际生产环境中,CentOS 5.5这个版本相当稳定,而且硬件兼容性也很好,是很多服务器装机者的首选系统,下面介绍CentOS 5.5的具体安装过程   说明:实际生产环境中,CentOS 5. ...

  4. 在git bush中如何退出vim编辑器

    写npm的pakege.json文件的files配置时,如果有不想包含的文件,那就要创建.npmignore文件排除,但windows系统又不允许创建以点开头命名的文件,咋办? 这时候就要用到linu ...

  5. fgets和scanf的区别

    fgets和scanf的区别 1.测试使用scanf的一个例子: #include "stdio.h" #include "string.h" int main ...

  6. DataTables给表格绑定事件

    $(document).ready(function() { $('#example').dataTable(); $('#example tbody').on('click', 'tr', func ...

  7. resumable.js —— 基于 HTML 5 File API 的文件上传组件 支持续传后台c#实现

    在git上提供了java.nodejs.c#后台服务方式:在这里我要用c#作为后台服务:地址请见:https://github.com/23/resumable.js 我现在visual studio ...

  8. 进程外组件通信之免注册com通信【原创】

    最近在搞进程外组件通信的东西,写了个demo,免注册的,一直没调通,其实就是两个问题卡了好几天,也没找到有用的资料,试了好几天终于才解决,现简单记录下来,免得大家跟我走一样的弯路.下面com端程序名称 ...

  9. [置顶] 【原创分享】嵌入式linux应用之内核移植定制篇-前篇(linux-3.8.12 mini2440)--20130824

    移植的话其实很早就做过了,不过那时用的友善定制的老版本2.6.32 驱动什么的全部弄好了,仅仅用默认配置而已.基本不用改动什么,很简单. 内核更新其实非常的快,今天我就用个3.8.12来移植. 当然, ...

  10. tag_on_failure => [] # prevent default _grokparsefailure tag on real records

    [elk@zjtest7-frontend config]$ cat stdin04.conf input { stdin { } } filter { # drop sleep events gro ...