【转】http://blog.chinaunix.net/uid-21411227-id-1826986.htmlhtml
一.逻辑运算符 ui
1.& 位与运算 spa
1) 运算规则 .net
位与运算的实质是将参与运算的两个数据,按对应的二进制数逐位进行逻辑与运算。例如:int型常量4和7进行位与运算的运算过程以下:unix
4=0000 0000 0000 0100 &7 =0000 0000 0000 0111= 0000 0000 0000 0100code
对于负数,按其补码进行运算。例如:例如:int型常量-4和7进行位与运算的运算过程以下:-4=1111 1111 1111 1100 &7 =0000 0000 0000 0111= 0000 0000 0000 0100htm
2) 典型应用 blog
(1) 清零 开发
清零:快速对某一段数据单元的数据清零,即将其所有的二进制位为0。例如整型数a=321对其所有数据清零的操做为a=a&0x0。 321=0000 0001 0100 0001 &0=0000 0000 0000 0000= 0000 0000 0000 0000get
(2) 获取一个数据的指定位
获取一个数据的指定位。例如得到整型数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
(3)保留数据区的特定位
保留数据区的特定位。例如得到整型数a=的第7-8位(从0开始)位的数据操做为: 110000000
321=0000 0001 0100 0001 & 384=0000 0001 1000 0000 = 0000 0001 0000 0000
2. | 位或运算
1) 运算规则
位或运算的实质是将参与运算的两个数据,按对应的二进制数逐位进行逻辑或运算。例如:int型常量5和7进行位或运算的表达式为5|7,结果以下:5= 0000 0000 0000 0101 | 7= 0000 0000 0000 0111=0000 0000 0000 0111
2) 主要用途
(1) 设定一个数据的指定位。例如整型数a=321,将其低八位数据置为1的操做为a=a|0XFF。321= 0000 0001 0100 0001 | 0000 0000 1111 1111=0000 0000 1111 1111
逻辑运算符||与位或运算符|的区别
条件“或”运算符 (||) 执行 bool 操做数的逻辑“或”运算,但仅在必要时才计算第二个操做数。 x || y , x | y 不一样的是,若是 x 为 true,则不计算 y(由于不论 y 为什么值,“或”操做的结果都为 true)。这被称做为“短路”计算。
3. ^ 位异或
1) 运算规则
位异或运算的实质是将参与运算的两个数据,按对应的二进制数逐位进行逻辑异或运算。只有当对应位的二进制数互斥的时候,对应位的结果才为真。例如:int型常量5和7进行位异或运算的表达式为5^7,结果以下:5=0000 0000 0000 0101^7=0000 0000 0000 0111 = 0000 0000 0000 0010
2) 典型应用
(1)定位翻转
定位翻转:设定一个数据的指定位,将1换为0,0换为1。例如整型数a=321,,将其低八位数据进行翻位的操做为a=a^0XFF;
(2)数值交换
数值交换。例如a=3,b=4。在例11-1中,无须引入第三个变量,利用位运算便可实现数据交换。如下的操做能够实现a,b两个数据的交换:
a=a^b;
b=b^a;
a=a^b;
4.~ 位非
位非运算的实质是将参与运算的两个数据,按对应的二进制数逐位进行逻辑非运算。
二.位移运算符
1.位左移 左移运算的实质是将对应的数据的二进制值逐位左移若干位,并在空出的位置上填0,最高位溢出并舍弃。例如int a,b; a=5; b=a<<2; 则b=20,分析过程以下: (a)10=(5)10=(0000 0000 0000 0101)2 b=a<<2; b=(0000 0000 0001 0100)2=(20)10 从上例能够看出位运算能够实现二倍乘运算。因为位移操做的运算速度比乘法的运算速度高不少。所以在处理数据的乘法运算的时,采用位移运算能够得到较快的速度。 提示 将全部对2的乘法运算转换为位移运算,可提升程序的运行效率 2.位右移 |
|
位右移运算的实质是将对应的数据的二进制值逐位右移若干位,并舍弃出界的数字。若是当前的数为无符号数,高位补零。例如: int (a)10=(5)10=(0000 0000 0000 0101)2 b=a>>2; b=(0000 0000 0000 0001)2=(1)10 若是当前的数据为有符号数,在进行右移的时候,根据符号位决定左边补0仍是补1。若是符号位为0,则左边补0;可是若是符号位为1,则根据不一样的计算机系统,可能有不一样的处理方式。能够看出位右移运算,能够实现对除数为2的整除运算。 提示 将全部对2的整除运算转换为位移运算,可提升程序的运行效率 |
|
|