您的位置:首页 > 编程语言 > C语言/C++

有关位运算的笔记

2014-03-03 15:09 204 查看

一:按位与

特点:跟0与则得0,跟1与则保留原位。

应用:保留某些位(保留为取1),其余位清0(清0位取0)。实现此功能时,经常会用到16进制的f和0,因为16进制中的1位即可表示二进制中的4位,而16进制中的f等效于二进制中的1111,十六进制中的0等效于二进制中的0000。

举例:某数的二进制表示为            0000 0000  1000 0100  0000 0000  0010 0101

现在与十六进制的0xffffff00与    1111 1111  1111 1111   1111 1111  0000 0000

结果为                                           0000 0000  1000 0100  0000 0000  0000 0000

实现了低八位取0,高二十四位保留。

当要求的位数较具体时(不是类似于低八位,高八位这样的要求时),就不能使用16进制了。总之,记住特点就好办了。

二:按位非

特点:跟0非则保留原位,跟1非则得1。

应用:保留某些位,其余位取1。

三:按位异或

特点:跟1异或使原位取反,跟0异或保留。

应用:(1)使某些位取反,并保留其他位。

     (2)若a^b=c,则c^b=a且c^a=b,利用此特点可以不借助中间变量而实现两个数交换。

四:按位取反

特点:原来的0变为1,原来的1变为0。

五:左移

特点:原有的高位舍弃,空出的低位补0。左移一位,就相当于乘2。但应注意的是,左移并不改变原来的数;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//程序目的:验证左移并不改变原来的数,且满足左移n位,乘2^n

//

//编程环境:vc6.0

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include<stdio.h>

void main()

{

int a=9;

int b=a<<1;

printf("%d   %d",a,b);

}

 

左移操作比乘法操作快得多,所以当需要乘2的倍数时,可以考虑用左移。

六:右移

特点:原有低位舍弃,空出的高位用符号位填补(vc++下)。同样的,右移n位,则原来的数除以2^n,除不尽时往小里取。

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//程序目的:验证右移n位,在原来的基础上除以2^n,并且在除不尽时,往小里取

//

//编程环境:vc6.0

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include<stdio.h>

void main()

{

int a=9;

int b=a>>1;

printf("%d   %d",a,b);

}

 

          
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息