漫漫考研路之C语言的位运算

来源:互联网 发布:php程序员简历项目经验 编辑:程序博客网 时间:2024/06/05 00:47


背景:感觉好久没有好好的写点关于计算机的东西了,最近一直在学习考研的内容,和计算机挂着四分之一的边,数据结构导论是之前自考考试考的内容,C语言和自考中的C++相似,只是程序多了一点,所以复习起来还是比较顺手的,C语言中有一章节的位运算,虽然篇幅比较短小,只有薄薄的五张纸,却蕴含了丰富多彩的内容,下面我来具体的介绍一下吧。


一、定义

   

     位运算是指进行二进制的运算。


二、分类


说明:

(1)位运算符中除~以外,均为二目(元)运算符,即要求两侧各有一个运算量。

(2)运算量只能是整型或字符型的数据,不能位实型数据。


1、“按位与”运算符(&)

    如果两个相应的二进制位都为1,则该位的结果值为1,否则为0。即:

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

    注意:如果参加&运算的是负数,则以补码形式表示为二进制数,然后按位进行“与”运算。


2、“按位或”运算符(|)

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

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


3、“异或”运算符(^)

    异或运算符^也称XOR运算符。它的规则是:若参加运算的两个二进制为同号,则结果为0(假);异号则为1(真)。即:

    0^0=0,0^1=1,1^0=1,1^1=0

   “异或”的意思是判断两个相应的位值是否为“异”,为“异”(值不同)就取真(1),否则为假(0)。

应用:

(1)使特定位翻转


(2)与0相^,保留原值


(3)交换两个值,不用临时变量



4、“取反”运算符(~)

    ~是一个单目(元)运算符,用来对一个二进制数按位取反,即将0变1,将1变0。

    注意:~运算符的优先级别比算数运算符、关系运算符、逻辑运算符和其他位运算符都高,例如,~a&b,先进行~a运算,然后进行&运算。


5、左移运算符(<<)

    用来将一个数的各二进制位全部左移若干位。例如:a=a<<2,将a的二进制数左移2位,右补0。高位左移后溢出,舍弃。

    左移一位相当于该数乘以2,左移两位相当于该数乘以2的2次方。


6、右移运算符(>>)

    用来将一个数的各二进制位全部右移若干位。例如:a=a>>2,将a的二进制数右移2位,移到右端的低位被舍弃,对无符号数,高位补0.

    右移一位相当于除以2,右移n位相当于除以2的n次方。

注意:右移的时候,注意符号位问题。对于无符号位数,右移时左边高位移入0;对于有符号的值,如果原来符号位为0(该数为正),则左边也是移入0。如果符号位原来为1(即负数),则左边移入0还是1,取决于所用的计算机系统。有的系统移入0,有的系统移入1.移入0的称为“逻辑右移”,即简单右移;移入1的称为“算数右移”。


三、注意问题

    

    如果两个数据长度不同(例如long型和int型)进行位运算时(如a&b,而a为long型,b为int型),系统会将二者按右端对齐。如果b为正数,则左侧16为补满0;若b为负数,左端应补满1,如果b为无符号整数型,则左侧填满0.


四、学习心得


1、在电脑的世界里只有0和1,大道至简。

2、不使用中间变量都能交换两个数的值,太牛了!





0 0
原创粉丝点击