分类: 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 |