`

c的位运算--悲痛的位运算

阅读更多
位运算应用口诀
清零取反要用与,某位置一可用或
若要取反和交换,轻轻松松用异或

移位运算
要点 1 它们都是双目运算符,两个运算分量都是整形,结果也是整形。
2 "<<" 左移:右边空出的位上补0,左边的位将从字头挤掉,其值相当于乘2。
3 ">>"右移:右边的位被挤掉。对于左边移出的空位,如果是正数则空位补0,若为负数,可能补0或补1,这取决于所用的计算机系统。
4 ">>>"运算符,右边的位被挤掉,对于左边移出的空位一概补上0。


(1) 按位与-- &
1 清零特定位 (mask中特定位置0,其它位为1,s=s&mask)---------------&是清0
2 取某数中指定位 (mask中特定位置1,其它位为0,s=s&mask)
(2) 按位或-- |
常用来将源操作数某些位置1,其它位不变 。 (mask中特定位置1,其它位为0 s=s|mask)------------|是置1
(3) 位异或-- ^
1 使特定位的值取反 (mask中特定位置1,其它位为0 s=s^mask)----------------^是取反
2 不引入第三变量,交换两个变量的值 (设 a=a1,b=b1)
目标 操作 操作后状态
a=a1^b1 a=a^b a=a1^b1,b=b1
b=a1^b1^b1 b=a^b a=a1^b1,b=a1
a=b1^a1^a1 a=a^b a=b1,b=a1


应用举例
(1) 判断int型变量a是奇数还是偶数
a&1 = 0 偶数
a&1 = 1 奇数
(2) 取int型变量a的第k位 (k=0,1,2……sizeof(int)),即a>>k&1
(3) 将int型变量a的第k位清0 ,即a=a&~(1<<k)
(4) 将int型变量a的第k位置1 , 即a=a|(1<<k)
(5) int型变量循环左移k次 ,即a=a<<k|a>>16-k (设sizeof(int)=16)
(6) int型变量a循环右移k次 ,即a=a>>k|a<<16-k (设sizeof(int)=16)
(7)整数的平均值
对于两个整数x,y,如果用 (x+y)/2 求平均值 ,会产生溢出,因为 x+y 可能会大于INT_MAX,但是我们知道它们的平均值是肯定不会溢出的,我们用如下算法:
int average(int x, int y) //返回X,Y 的平均值
{
return (x&y)+((x^y)>>1);
}
(8)判断一个整数是不是2的幂 ,对于一个数 x >= 0,判断他是不是2的幂
boolean power2(int x)
{
return ((x&(x-1))==0)&&(x!=0)
}
(9)不用temp交换两个整数
void swap(int x , int y)
{
x ^= y;
y ^= x;
x ^= y;
}
(10)计算绝对值
int abs( int x )
{
int y ;
y = x >> 31 ;
return (x^y)-y ; //or: (x+y)^y
}
(11)取模运算转化成位运算 (在不产生溢出的情况下)
a % (2^n) 等价于 a & (2^n - 1)
(12)乘法运算转化成位运算 (在不产生溢出的情况下)
a * (2^n) 等价于 a<< n
(13)除法运算转化成位运算 (在不产生溢出的情况下)
a / (2^n) 等价于 a>> n
例: 12/8 == 12>>3
(14) a % 2 等价于 a & 1
(15) if (x == a) x= b;
   else x= a;
   等价于 x= a ^ b ^ x ;

(16) x 的 相反数 表示为 (~x+1)

分享到:
评论

相关推荐

    (完整word版)单片机avr-c语言位运算-与或非-异或逻辑-运算介绍-详解.doc

    本文将详细探讨AVR单片机C语言中的位运算,包括其概念、操作符及其应用。 首先,位运算符是用于在二进制位上执行操作的基本运算符。在AVR单片机C语言编程中,位运算符主要包括与(&)、或(|)、非(~)、异或(∧)、左移...

    13-位运算-自己使用的C语言教程PPT-适合老师备课或者自学.pptx

    位运算在C语言中通常用于设置或清除特定位,检查某些位的状态,以及进行高效的位级数据处理。例如,你可以通过位与运算来掩码某个值,只保留特定的位,而位或运算则常用来设置或添加位。 此外,了解数值的原码、...

    四则运算--Java、C语言.txt

    四则运算--Java、C语言 代码(记事本保存)。点个赞再走啊,客官~ 四则运算--Java、C语言 代码(记事本保存)。点个赞再走啊,客官~ 四则运算--Java、C语言 代码(记事本保存)。点个赞再走啊,客官~ 四则运算--Java...

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

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

    学习笔记-双指针算法-位运算-离散化-区间合并

    学习笔记-双指针算法-位运算-离散化-区间合并

    一个c语言 位运算 的程序

    ### C语言位运算程序解析及知识点详解 #### 标题:一个C语言位运算的程序 本程序主要展示了如何在C语言中运用位运算来实现数据处理与转换的基本方法。位运算是指直接对二进制位进行操作的运算方式,在计算机科学中...

    大数运算-RSA-c语言大数运算库

    在实际应用中,C语言的大数运算库通常会使用动态分配内存来存储大整数,通过数组或链表结构来表示多位数字。这些库通常会提供高效的大数乘法实现,如Karatsuba算法或Toom-Cook算法,以及快速幂算法来加速模幂运算。...

    c语言位运算c语言位运算

    c语言位运算c语言位运算c语言位运算c语言位运算c语言位运算

    四则运算-----C语言程序模拟器(代码)

    四则运算-----C语言程序模拟器(代码)

    四则运算-----C语言程序模拟器(执行程序)

    四则运算-----C语言程序模拟器(执行程序)

    C语言位运算练习题1[文].pdf

    "C语言位运算练习题1" 本资源提供了15道C语言位运算练习题,涵盖了位运算、逻辑运算和移位运算等知识点。这些题目可以帮助程序员和开发者熟悉C语言的基本运算符和操作符,提高编程能力和解决问题的能力。 在第一个...

    C语言位运算

    C语言的位运算是一种强大的工具,它允许程序员直接在二进制级别上操作数据,这是C语言的一个显著特征,使其在系统级编程中表现出色。位运算不仅包括基本的位逻辑运算,还有移位运算,这些操作对于优化代码性能、处理...

    单片机C语言实例--279-用自增运算控制P0口8位LED流水花样.zip

    在本实例中,"单片机C语言实例--279-用自增运算控制P0口8位LED流水花样.zip"是一个关于单片机编程的教程,主要讲解如何使用C语言来控制单片机的P0端口,实现8位LED的流水灯效果。这个效果通常用于学习和演示单片机的...

    大整数的四则运算----高质量C语言程序.doc

    大整数的四则运算----高质量C语言程序.doc

    复数四则运算-数据结构 C/C++

    用面向对象语言编写的源程序,实现复数四则运算功能

    C语言-位运算和预处理命令

    关于C语言的课件,关于位运算和预处理命令。

    C语言位运算详解

    C语言位运算是一种底层操作,它允许我们直接对二进制位进行操作,这对于理解计算机内部工作原理和优化代码性能非常有帮助。本文将详细解析C语言中的位运算符及其应用技巧。 一、位运算符 1. 按位与(&): 两个操作数...

    单片机C语言实例--282-用P0口显示按位异或运算结果.zip

    "单片机C语言实例--282-用P0口显示按位异或运算结果.zip"是一个教学资源,包含了一个C语言程序(ex15.c)和相关开发环境的配置文件,如ex15.DBK、ex15.DSN,以及编译生成的hex文件(ex15.hex)。这个实例主要针对...

    ASCII码 C语言位运算优先级.txt

    根据提供的文件信息,我们可以归纳出两个主要的知识点:ASCII码和C语言中的位运算优先级。下面将分别对这两个主题进行详细的阐述。 ### ASCII码 ASCII(American Standard Code for Information Interchange,美国...

Global site tag (gtag.js) - Google Analytics