位运算符的应用
来源:互联网 发布:威廉玛丽学院 知乎 编辑:程序博客网 时间:2024/04/27 18:46
1.按位与运算 按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。规律是:只有对应的两个二进位均为1时,结果才为1,否则为0。参与运算的数以补码形式出现。例如:
9&5即00001001(9的二进制补码)&00000101(5的二进制补码)得00000001(1的二进制补码)可见9&5=1
按位与运算通常用于清0或保留特定位,例如把a的高八位清0,保留低八位,可以做a&255的运算(255二进制数为0000000011111111)
应用:
a. 清零特定位 (mask中特定位置0,其它位为1,s=s&mask)
b. 取某数中指定位 (mask中特定位置1,其它位为0,s=s&mask)
2. 按位或运算 按位或运算符“|”是双目运算符。其功能是参与运算的两数各对应的二进位相或。规律是:只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。
例如:9|5可写算式如下:
00001001|00000101
00001101 (十进制为13)可见9|5=13
应用:
常用来将源操作数特定位置变为1,其它位不变。 (mask中特定位置1,其它位为0 s=s|mask)
3. 按位异或运算 按位异或运算符“^”是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1(即“异性相吸为一”)。参与运算数仍以补码出现,
例如9^5可写成算式如下:
00001001^00000101 00001100 (十进制为12)
应用:
a. 使特定位的值取反 (mask中特定位置为1,其它位为0 s=s^mask)
b. 不引入第三变量,交换两个变量的值
int a=10,b=12;//a=1010,b=1100;
a=a^b;//a=0110,b=1100;
b=a^b;//a=0110,b=1010;
a=a^b;//a=1100,b=1010;
(此算法能够时间是由于异或运算特点决定的,任意一个数与任意一个给定的值连续异或两次,值不变。即a^b^b=a)
4. 求反运算
求反运算符~为单目运算符,具有右结合性。 其功能是对参与运算的数的各二进位按位求反。例如~9的运算为: ~(0000000000001001)结果为:1111111111110110
需注意对负数取反,要使用补码的形式表示,如~-9(原码:10001001->反码:11110110->补码:11110111->~-9:00001000即8)补码=反码+1;
5. 左移运算
左移运算符“<<”是双目运算符。其功能把“<< ”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数, 高位丢弃,低位补0。 其值相当于乘2。例如: a<<4 指把a的各二进位向左移动4位。如a=00000011(十进制3),左移4位后为00110000(十进制48)。
6. 右移运算
右移运算符“>>”是双目运算符。其功能是把“>> ”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数。其值相当于除2。
例如:设 a=15,a>>2 表示把000001111右移为00000011(十进制3)。对于左边移出的空位,如果是正数则空位补0,若为负数,可能补0或补1,这取决于所用的计算机系统。移入0的叫逻辑右移(在Java里用>>>表示),移入1的叫算术右移
Turbo C采用逻辑右移。
main(){
unsigned a,b;
printf("input a number: ");
scanf("%d",&a);
b=a>>5;//在编程过程中经常忘记赋值语句,而直接写作a>>5,单这样写其实的值没发生变化
b=b&15;
printf("a=%d b=%d ",a,b);
}
- 位运算符的应用
- 位运算的应用
- 位运算的应用
- 位运算的应用
- 位运算的应用
- 位运算的应用
- 位运算的应用
- 位运算的应用
- 位运算的应用
- 位运算的应用
- 位运算的应用
- 位运算的应用
- 位运算的应用
- 位运算符的应用的总结
- 位运算符的应用的总结
- 位运算符的一些简单应用
- 位运算符的一些简单应用
- 位运算符的一些简单应用
- c++ References vs. Pointers
- excel 拖动数据 不能套用公式
- AfxGetApp()的使用
- java基本概念(Array , Arrays,Collection,Map)
- 什么是幸福?
- 位运算符的应用
- Leave Those Debugging Commands Alone!
- c++ bool运算
- firefox与IE中的 innerText 和innerHTML
- 数据库服务器CPU占满100%的问题解决方案列表!
- 简单移位加密
- Linux 系统中一些针对文件系统的节能技巧
- 位域和sizeof 2
- SQL中CONVERT()转化函数的用法(转)