有关位运算的笔记

7 篇文章 0 订阅

一:按位与

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

应用:保留某些位(保留为取1),其余位清0(清0位取0)。实现此功能时,经常会用到16进制的f0,因为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=ac^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);

}

 

          

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值