C#的位运算符
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#的位运算符的更多相关文章
- java的布尔运算符和位运算符
1.布尔运算符 && 逻辑与: || 逻辑或: != 不等于: 三元操作符:?: :表达式为 condition?expression1:expression2(当条件为真时 ...
- c 语言的位运算符复习
转载和修正,原文连接:http://www.cnblogs.com/911/archive/2008/05/20/1203477.html 位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进 ...
- Java的算数运算符、关系运算符、逻辑运算符、位运算符
JAVA的运算符,分为四类: 算数运算符.关系运算符.逻辑运算符.位运算符 算数运算符(9):+ - * / % ++ -- 关系运算符(6):== != > >= & ...
- c语言基础表达式, 关系运算符, 逻辑运算符, 位运算符, 数据的取值范围, 分支结构(if...else, switch...case)
1.表达式: 表达式的判断是有无结果(值), 最简单的表达式是一个常量或变量, 如:12, a, 3 + 1, a + b, a + 5 都是表达式 2.BOOL(布尔)数据类型: c语言中除了基本数 ...
- PHP中的运算符---位运算符、递增递减运算符、三元运算符、字符串运算符、数组运算符、类型运算符、错误控制运算符
1.位运算符 位运算符用来对整型数的指定位进行置位,如果被操作数是字符串,则对该字符串的ASCII码值进行操作. 运算类型 运算符 举例 结果 按位与 & $a & $b 将$a 与 ...
- ECMAScript 位运算符
位运算符是在数字底层(即表示数字的 32 个数位)进行操作的. 重温整数 ECMAScript 整数有两种类型,即有符号整数(允许用正数和负数)和无符号整数(只允许用正数).在 ECMAScript ...
- javascript运算符——位运算符
× 目录 [1]二进制 [2]非 [3]与[4]或[5]异或[6]左移[7]右移[8]>>>[9]应用 前面的话 位运算符是非常底层的运算,由于其很不直观,所以并不常用.但是,其速度 ...
- PHP中为位运算符(几乎很少用)
PHP语言里的位运算符&.|.^ .~.〈〈 .〉〉 "&" 按位与运算 按位与运算符"&"是双目运算符.其功能是参与运算的两数各对应的 ...
- PHP运算符:算数运算符、逻辑运算符、三目运算符、位运算符、字符串运算符。
赋值运算符 PHP 赋值运算符用于向变量写值. PHP 中基础的赋值运算符是 "=". 这意味着右侧复制表达式会为左侧运算数设置值. _______________________ ...
- Java的位运算符详解实例——与(&)、非(~)、或(|)、异或(^)
位运算符主要针对二进制,它包括了:“与”.“非”.“或”.“异或”.从表面上看似乎有点像逻辑运算符,但逻辑运算符是针对两个关系运算符来进行逻辑运算,而位运算符主要针对两个二进制数的位进行逻辑运算.下面 ...
随机推荐
- IDEA - Project files cannot be watched (are they under network mount?)
在64位Linux系统上使用IDEA时遇到如下问题,启动时警告信息External file changes sync may be slow Project files cannot be watc ...
- C# 解析嵌套的json文件.
概述 今天我同学问我如何转换json文件,没处理过,网上搜了一下,json转excel的很少,反过来倒是有许多人写了工具. json文件的结构大致是这样的: {, , }, , "type& ...
- 如何读懂SQL Server的事务日志
简介 本文将介绍SQL Server的事务日志中记录了哪一些信息,如何来读懂这些事务日志中信息.首先介绍一个微软没有公开的函数fn_dblog,在文章的接下来的部分主要用到这个函数来读取事务日志. f ...
- C#中对Excel进行操作
工作中要处理一批数据,主要是处理从别处导出来的Excel表格(大概有一千多行,三十多列),拿到表格对Excel表格进行分析,按照一定的规则进行拆分成为一万多行的数据:首先这个需求要用程序进行处理的背景 ...
- java线层的使用
class Do3 { public static void main(String[] args) { XC d1=new XC("小王"); XC d2=new XC(&quo ...
- osg复制多个相同物体修改材质属性问题
转自http://www.cnblogs.com/ylwn817/articles/2153982.html 当通过osg复制多个相同物体时候,修改复制过来的某个物体材质属性时候,假设我们物体透明度, ...
- nodejs安装过程及视频地址
说实话在安装的过程中遇到了很多问题,包括npm install connect出错,主要是我之前安装了0.10版本之后安装4.X版本造成的,后面卸载没有卸载完全造成的,后面也就好了,网上说了很多重新设 ...
- 针对AJAX与JSONP的异同
针对AJAX与JSONP的异同 1.ajax和jsonp这两种技术在调用方式上“看起来”很像,目的也一样,都是请求一个url,然后把服务器返回的数据进行处理,因此jquery和ext等框架 ...
- 使用CSS3+jquery.js 实现微信抽奖转盘效果
上次发表了一篇 微信抽奖转盘活动-效果源码分析 最近想起了刚接到这个项目时第一时间脑海里迸出的解决方法 “CSS3”! 为什么不能用CSS3来实现呢? 所以我打算用CSS3来实现这个效果.并不需要依赖 ...
- bzoj 2075: [POI2004]KAG
整天鬼畜题搞搞,感觉药丸…… 这种题出到xjoi模拟题里,太神了…… 这题的核心在于分割Cograph,尝试把Cograph的合成过程给求出来. 我们将这张图中的边为黑边,在这张图的补图中出现的边为白 ...