`
ze_nana
  • 浏览: 48583 次
社区版块
存档分类
最新评论

【位运算的用法】

 
阅读更多

【位运算符介绍】

C语言具有位逻辑运算和移位运算的独特功能,参与位运算的运算量必须是整数。位逻辑运算包括&(按位与)|(按位或)^(按位异或)~(取反)四种运算,移位运算有<<(左移)>>(右移)两种运算。其中~位单目运算符。

逻辑运算】

 & (按位与)】

参与运算的量,如果相对应的两位都为1,则该位的结果值为1,否则为0,即:

0&0==0       0&1==0      1&0==0     1&1==1

如:a的值为0x1234b的值为0x00a&b运算的结果c应为:

       a    0001   0010   0011   0100

      & b   0000   0000   1111   1111

       c    0000   0000   0011   0100

按位与常用于将某个运算量的某些位清0或提取某些位的值。

如上例子,将变量的高8位清0,同时保留或提取低8位的值,可用一个高8位为0,低8位为1的值0x00ff和它进行按位与。

 | (按位或)】

参与运算的量,如果相对应的两位都为0,则该位的结果值为0,否则为1,即:

0|0==0       0|1==1      1|0==1     1|1==1

如:a的值为0x1234b的值为0x00a|b运算的结果c应为:

       a    0001   0010   0011   0100

      |b    0000   0000   1111   1111

       c    0001   0010   1111   1111

    按位或常用于将某个运算量的某些位置1,如本例中将变量的低8位置1,高8位不变,可用一个高8位为0,低8位为1的值0x00ff和它进行按位或。

  ^ (按位异或)】

参与运算的量,如果相对应的两位相异,则该位的结果为1,否则为0,即:

00==0       01==1      10==1     11==0

如:a的值为0x1234b的值为0x00ab运算的结果c应为:

       a    0001   0010   0011   0100

     b    0000   0000   1111   1111

       c    0001   0010   1100   1011

    按位异或有“与1异或”该位翻转,“与0异或”该位不变的规律。如本例中用0x00ff进行按位异或,使变量a的低8位翻转,高8位不变。

 ~ (取反)】

将参与运算量的相对应位的值取反,即1001

如:a的值为0x1234,~a运算的结果c应为:

      a    0001   0010   0011   0100

      c    1110   1101   1100   1011

移位操作符】

 <<  (左移)】

按位左移是将一个运算量的各位依次左移若干位,低位补0,高位舍弃不要。

假设机器字长为8位,变量a的值为16,将a左移二位,即a=a<<2   

左移前   0001  0000     左移后   0100  0000

由此看出,左移一位相当于该数乘2,左移二位相当于乘4,即22,但这要以该数左移之后不“溢出”为前提。

所谓“溢出”指该数已超过机器字长所能容纳的范围,如该例若继续左移二位,该数为16× 24=256,超出了字长8位的表示范围(257),即产生了溢出。  

 >>  (右移)】

按位右移是将一个运算量的各位依次右移若干位,低位被移出,高位对无符号数补0,对有符号数要按最高符号位自身填补。

右移一位相当于该数除以2,但有可能带来误差。假设机器字长为8位,变量a值为15,将a右移二位,即a=a>>2    

右移前   0000  1111      右移后   0000  0011

如果a是带符号的负数,a=-16,存放在机器中的补码为1111  0000,则a=a>>2,值为- 4

右移前   1111  0000      右移后   1111  1100

 

移位操作可用于整数的快速乘除运算,左移一位等效于乘2,而右移一位等效于除以2

分享到:
评论

相关推荐

    位运算大师级使用方法---

    位运算大师级使用方法---位运算大师级使用方法---位运算大师级使用方法---位运算大师级使用方法---位运算大师级使用方法---位运算大师级使用方法---位运算大师级使用方法---位运算大师级使用方法---位运算大师级使用...

    回归本源——位运算及其应用

    摘自2014国家集训队论文《回归本源——位运算及其应用》,详细描述了位运算的众多巧妙用法,对于位运算的深入运用可以参考。

    位运算使用技巧

    位运算的使用技巧,里面有一些使用的小技巧,同时还附带一些位运算的简介

    位运算常用操作总结

    位运算常用操作总结,总结的很详细,一般都是很使用的方法!学习很有用

    C语言中的位运算及其用法

    C语言的一部分,按位与运算,按位或运算,按位异或运算,求反运算,左移运算 等

    位运算的妙用

    位运算的一些常用法,无论是平时的开发还是用于笔试面试,都非常有用

    C语言位运算

    C语言的位运算用法, 介绍移位操作等位运算操作

    数组位运算求任意区间内素数的个数

    超高速的素数筛选方法,与一般的筛法不同的是本代码使用的是基于数组中的位运算

    运算放大器的使用方法

    本书是一本非常古老的资源,是俄罗斯人写的,该书以浅显易懂为主要特点,对运算放大器的使用方法进行了很好的概括

    怎样使用运算放大器 运算放大器的使用方法

    教你如何使用运算放大器 放大器的入门书,既是一本运放的电路集,也是一本设计计算的参考书

    怎样使用运算放大器 详细介绍各种运算放大器使用方法范围

    该资料详细介绍了各种运算放大器的类型及使用范围和方法。

    NIOS32位浮点运算组件

    使用时需在NIOS IDE中添加自定义模块,具体使用方法参考avic的《NIOS那些事儿》中pwm一章 假定定义结构名为cusfloat,使用如下: cusfloat-&gt;x=1.1; cusfloat-&gt;y=2.2; cusfloat-&gt;op=1(0为加法,1为乘法,2为减法,3无...

    天云双色集合运算

    天云双色集合运算 V2014 Vol7.06 x86 Realease

    matlab数组运算用法说明

    在 Matlab 中,数组运算是一种常见的操作。可以对数组进行加、减、乘、除等基本运算,也可以进行矩阵乘法、幂运算、开方运算等高级运算。下面以常见的数组运算为例,简要说明其用法。

    计算机组成原理实验3-TEC-2实验计算机运算器实验

    3. 了解和掌握TEC-2机运算器相关控制信号偶的含义和使用方法 4. 了解和掌握运算器的进位时间的测试方法,及进一步掌握双踪示波器的使用方法 一. 实验原理 1.概述 运算器部件是计算机五大功能部件中的数据加工部件...

    MIPS运算器设计实验报告(完整)+代码

    华中科技大学计算机组成原理实验报告(完整)+代码参考 ---...2.掌握 Logisim 中各种运算组件的使用方法,熟悉多路选择器的使用 3.能利用前述实验完成的 32 位加法器、 Logisim 中的运算组件构造指定规格的 ALU 单元

    java四则运算

    编写一个包含主方法main的公共类(访问权限为public的类),主方法main中完成的任务是:从键盘上输入两个运算数(double 类型)和一个运算符(char 类型),使用(1)中的类输出运算结果(保留两位小数)。...

    计算机体系与结构 16位ALU设计 实现对应的加减、逻辑运算、移位、比较等功能 计算机体系与结构课设 课程设计

    熟悉多路选择器的使用,通过对ALU的工作原理和逻辑功能的理解,设计16位简单ALU。 1.1.2 功能要求 ALU需要实现对应的加减、逻辑运算、移位、比较等功能并采用仿真软件设计和对软件进行调试。 1.2 总体设计 1.2.1 ...

    TI dsp28335浮点运算库

    TI官方浮点运算库,支持各种算法,效果比自己用C编写的效果要好,运算速度快,很实用。

    使用运算放大器三大注意事项

    对于微弱信号的放大,只用单个放大器难以达到好的效果,必须使用一些较特别的方法和传感器激励手段,而使用同步检测电路结构可以得到非常好的测量效果。这种同步检测电路类似于锁相放大器结构,包括传感器的方波...

Global site tag (gtag.js) - Google Analytics