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的位运算符详解实例——与(&)、非(~)、或(|)、异或(^)
位运算符主要针对二进制,它包括了:“与”.“非”.“或”.“异或”.从表面上看似乎有点像逻辑运算符,但逻辑运算符是针对两个关系运算符来进行逻辑运算,而位运算符主要针对两个二进制数的位进行逻辑运算.下面 ...
随机推荐
- 关于动态SQL中的NULL
declare v_sql ); v_c1 number; v_c2 number; begin v_c2 :; v_sql := 'begin '; v_sql := v_sql||'update ...
- C#类的基本用法
Preson类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...
- 通俗理解angularjs中的$apply,$digest,$watch
<!DOCTYPE html> <html lang="zh-CN" ng-app="app"> <head> <me ...
- u盘禁用
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\USBSTOR]" ...
- javascript两种定时器的使用及其清除
<!--示例代码如下:--><!DOCTYPE html> <html> <body> <p>A script on this page s ...
- struts2中<s:select/>标签的运用详解
<s:select list="smsTypes" listKey="SmsTypeId" listValue="SmsTypeName&quo ...
- jquery1.9学习笔记 之层级选择器(二)
子孙选择器(“祖先 子孙”) 描述:选择所有给出祖先选择器的子孙选择器. 例子: 用蓝色虚线边框标记所有表单子孙元素的输入.表单里的输入框用黄色背景. <!doctype html>< ...
- for_each 用法!
class MapTest:public CapTest{ private: set <string> MyTestContain; typedef pair <string,int ...
- GO求平均值
package main import "fmt" func main(){ sum:=0.0 avg:=0.0 xs:=" switch len(xs){ : avg= ...
- IOS流媒体播放
IOS流媒体播放 1. 这里的流媒体地址是指服务端那边已经调好格式的可以在ios上播放的视频流. 下面提供几个视频流的地址: NSString *linkStr = http://61.160.2 ...