有关位运算的笔记
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); }
相关文章推荐
- 【英语】Bingo口语笔记(41) - 有关爱情的表达
- C++学习笔记-----用位运算实现加减乘除
- unix环境编程学习笔记-----有关进程的一些疑问???
- 有关DataForm组件的研究_显示多重数据模型集合——Silverlight学习笔记[24]
- 有关ImplicitStyleManager组件的研究——Silverlight学习笔记[30]
- [笔记]有关 字符串String的用法
- JAVA学习笔记-位运算
- 有关Input类组件的研究——Silverlight学习笔记[42]
- 有关SQLite的substr函数的笔记
- 有关LINUX I/O 的一些学习笔记
- [C++学习笔记]--位运算、引用、const指针
- 有关vsftpd的笔记
- python 重命名 有关类的笔记
- 有关AsyncTask的一些随笔笔记
- 【C语言学习笔记】打印九九乘法表,要求只用一个变量(位运算)
- 有关线性代数的Matlab代码笔记(3)——左零空间、二维图像绘制
- Python学习笔记(八)——有关文件的操作
- STL笔记(5)条款49:学习破解有关STL的编译器诊断信息
- 有关ubuntu的route笔记
- 【预习笔记】一道很有趣的有关java类加载初始化的题目