位运算01 零基础入门学习C语言64

第十二章:位运算01

 

让编程改变世界

Change the world by program


 

位运算概念

位运算是指按二进制位进行的运算。因为在系统软件中,常要处理二进制位的问题。 例如:将一个存储单元中的各二进制位左移或右移一位,两个数按位相加等。 c语言提供位运算的功能,与其他高级语言(如PASCAL)相比,具有很大的优越性。  

位运算符和位运算

  [caption id="attachment_208" align="aligncenter" width="300"] 位运算符和位运算[/caption]   (1)位运算符中除~以外,均为二目(元)运算符,即要求两侧各有一个运算量。 (2)运算量只能是整型或字符型的数据,不能为实型数据。  

“按位与”运算符(&)

  含义:参加运算的两个数据,按二进制位进行“与”运算。 如果两个相应的二进制位都为1,则该位的结果值为1;否则为0。 例如:

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

1&0 = 0,1&1 = 1

注意: 3&5并不等于8, 应该是按位与运算: [caption id="attachment_209" align="aligncenter" width="300"] 位运算符和位运算[/caption]   如果参加&运算的是负数(如-3&-5), 则要 以补码形式表示为二进制数,然后再按位进行“与”运算。  

按位与运算的用途

 

一、 清零

若想对一个存储单元清零,即使其全部二进制位为0,只要找一个二进制数,其中各个位符合以下条件:原来的数中为1的位,新数中相应位为0。然后使二者进行&运算,即可达到清零目的。 例如:要求将二进制数11100101的第2位清零

二、取一个数中某些指定位

例如:我们需要对一个字型数据取出其低8位的值时,我们可以这么做。  

“按位或”运算符(|)

两个相应的二进制位中只要有一个为1,该位的结果值为1。 即:

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

1|0=1,1|1=1

例如: [caption id="attachment_210" align="aligncenter" width="300"] “按位或”运算符[/caption]  

课间练习

编写一个小程序,将输入的大写字母转换为小写字母,输入的小写字母转换为大写字母,要求用位操作完成转换过程。  

“异或”运算符(^)

异或运算符^也称XOR运算符。  

它的规则是:

若参加运算的两个二进制位同号则结果为0 (假),异号则结果为1(真) 即: 0^0=0,0^1=1,1^0=1, 1^1=0 例如: [caption id="attachment_212" align="aligncenter" width="300"] 异或运算符[/caption]  

^运算符应用

一、使特定位翻转 设有01111010,想使其低4位翻转,即1变为0,0变为1。可以将它与00001111进行^运算,即: [caption id="attachment_213" align="aligncenter" width="300"] 异或运算符使指定为翻转[/caption]   二、与0相^,保留原值 例如: [caption id="attachment_214" align="aligncenter" width="300"] 异或运算符的应用[/caption] 因为原数中的1与0进行^运算得1,0^0得0,故保留原数。   三、交换两个值,不用临时变量 !这玩意新鲜! 例如:a=3,b=4,现在想将a、b变量的值交换位置,我们传统的做法是定义多一个temp变量,而现在temp去度蜜月了,怎么办? 我们可以这样做:

a=a^b;

b=b^a;

a=a^b;  

这种方法也常应用于加密算法。 [buy] 获得所有教学视频、课件、源代码等资源打包 [/buy] [Downlink href='http://kuai.xunlei.com/d/LREJCQILJMVQ']视频下载[/Downlink]
原文地址:https://www.cnblogs.com/LoveFishC/p/3846081.html