Chinaunix首页 | 论坛 | 博客
  • 博客访问: 714098
  • 博文数量: 96
  • 博客积分: 2110
  • 博客等级: 大尉
  • 技术积分: 1018
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-23 19:36
文章分类

全部博文(96)

文章存档

2013年(2)

2012年(17)

2011年(77)

分类: C/C++

2011-02-08 16:11:58

& 位与运算


运算规 则
TAG:位运算,位运算符,逻辑 运算符,& 位与运算
TEXT:
位与运算的实质是将参与运算的两个数据,按对应的二进制数逐位进行逻辑与运算。例如:int型常量4和 7进行位与运算的运算过程如下:
4=
0000 0000 0000 0100
&
7 =
0000 0000 0000 0111
=
0000 0000 0000 0100
对于负数,按其补码进行运算。例如:例如:int型常量-4和7进行位与运算的运算过程如下:
-4=
1111 1111 1111 1100
&
7 =
0000 0000 0000 0111
=
0000 0000 0000 0100

REF:.txt


典型应 用


清零
TAG:位运算,位运算符,逻辑 运算符,& 位与运算典型应用,清零
TEXT
清零:快速对某一段数据单元的数据清零,即将其全部的二进制位为0。例如整型数a=321对其全部数据 清零的操作为a=a&0x0。
321=
0000 0001 0100 0001
&
0=
0000 0000 0000 0000
=
0000 0000 0000 0000
REF:.txt


获取一 个数据的指定位
TAG:位运算,位运算符,逻辑 运算符,& 位与运算典型应用,获取一个数据的指定位
TEXT
获取一个数据的指定位。例如获得整型数a=的低八位数据的操作为a=a&0xFF。
321=
0000 0001 0100 0001
&
0xFF =
0000 0000 1111 11111
=
0000 0000 0100 0001
获得整型数a=的高八位数据的操作为a=a&0xFF00。
==
a&0XFF00==
321=
0000 0001 0100 0001
&
0XFF00=
1111 1111 0000 0000
=
0000 0001 0000 0000
REF:.txt


保留数 据区的特定位
TAG:位运算,位运算符,逻辑 运算符,& 位与运算典型应用,保留数据区的特定位
TEXT
保留数据区的特定位。例如获得整型数a=的第7-8位(从0开始)位的数据操作为:
110000000
321=
0000 0001 0100 0001
&
384=
0000 0001 1000 0000
=
0000 0001 0000 0000
REF:.txt


| 位或运算


运算规 则
TAG:位运算,位运算符,逻辑 运算符,位或运算,位或运算运算规则
TEXT:
位或运算的实质是将参与运算的两个数据,按对应的二进制数逐位进行逻辑或运算。例如:int型常量5和 7进行位或运算的表达式为5|7,结果如下:
?5= 0000 0000 0000 0101
| 7= 0000 0000 0000 0111
=?0000 0000 0000 0111

REF:.txt
;&


主要用 途
TAG:位运算,位运算符,逻辑 运算符,位或运算,位或运算主要用途
TEXT:
设定一个数据的指定位。例如整型数a=321,将其低八位数据置为1的操作为a=a|0XFF。
321= 0000 0001 0100 0001
|牋 0000 0000 1111 1111
=牋 0000 0000 1111 1111

REF:.txt
an


逻辑运 算符||与位或运算符|的区别
TAG:位运算,位运算符,逻辑 运算符,位或运算,逻辑或运算符与位或运算符的区别
TEXT:条件“或”运算符 (||) 执行 bool 操作数的逻辑“或”运算,但仅在必要时才计算第二个操作数。
x || y
x | y
不同的是,如果 x 为 true,则不计算 y(因为不论 y 为何值,“或”操作的结果都为 true)。这被称作为“短路”计算。
class MainClass
{
static bool Method1()
{
Console.WriteLine("Method1 called");
return true;
}

static bool Method2()
{
Console.WriteLine("Method2 called");
return false;
}

static void Main()
{
Console.WriteLine("regular OR:");
Console.WriteLine("result is {0}", Method1() | Method2());
Console.WriteLine("short-circuit OR:");
Console.WriteLine("result is {0}", Method1() || Method2());
}
}
输出:
regular OR:
Method1 called
Method2 called
result is True
short-circuit OR:
Method1 called
result is True

REF:.txt


^ 位异或


运算规 则
TAG:位运算,位运算符,逻辑 运算符,^ 位异或
TEXT:
位异或运算的实质是将参与运算的两个数据,按对应的二进制数逐位进行逻辑异或运算。只有当对应位的二进 制数互斥的时候,对应位的结果才为真。
例如:int型常量5和7进行位异或运算的表达式为5^7,结果如下:
5=
0000 0000 0000 0101
^
7=
0000 0000 0000 0111
=
0000 0000 0000 0010
REF:.txt


典型应 用


定位翻 转
TAG:位运算,位运算符,逻辑 运算符,^ 位异或典型应用,定位翻转
TEXT
定位翻转:设定一个数据的指定位,将1换为0,0换为1。例如整型数a=321,,将其低八位数据进行 翻位的操作为a=a^0XFF;
(a)10=(321)10=(0000 0001 0100 0001)2
a^0XFF=(0000 0001 1011 1110)2=(0x1BE)16
321=
0000 0001 0100 0001
^
0xFF=
0000 0000 1111 1111
=
0000 0001 1011 1110
REF:.txt


数值交 换
TAG:位运算,位运算符,逻辑 运算符,^ 位异或典型应用,定位翻转
TEXT
数值交换。例如a=3,b=4。在例11-1中,无须引入第三个变量,利用位运算即可实现数据交换。
例12-1 编程实现两个数据的交换。
#include "stdafx.h"
int main(int argc, char* argv[])
{
int a,b;
a=3,b=4;
printf("\na=%d,b=%d",a,b);
a=a^b;
b=b^a;
a=a^b;
printf("\na=%d,b=%d",a,b);
return 0;
}
程序的运行结果为
a=3,b=4
a=4,b=3
分析程序的运算过程如下:
b=b^(a^b)=b^b^a=a;
a=a^b=(a^b)^(b^a^b)=a^b^b^a^b= a^a^ b^b ^b=b
REF:.txt


~ 位非
TAG:位运算,位运算符,逻辑 运算符,~ 位非
TEXT:
位非运算的实质是将参与运算的两个数据,按对应的二进制数逐位进行逻辑非运算。例如:对int型常量7 进行位非运算的表达式为~7,结果为2,计算过程如下:

~?7=0000 0000 0000 0111
=牋 0000 0000 0000 0010
REF:.txt
iv
阅读(5189) | 评论(0) | 转发(1) |
0

上一篇:vim 移 动

下一篇:位移运算符

给主人留下些什么吧!~~