C语言位运算学习知识

C语言位运算学习知识

C语言中提供给开发人员一种位的运算,这种位的运算常用在检测和控制领域中,这和c语言的特性关系非常大,因为c语言是具有高级语言的特点和低级语言的功能,能完成一些汇编语言所能完成的功能。给开发人员提供了一定的简便。


【运算符】位运算中有6中运算符【&,|,^,~,<<,>>】分别是按位与,按位或,按位异或,取反,左移,右移。
其中除了~,其他都是二目元,而且在运算中的运算量只能是整形或者是字符型,绝对不能有实型出现。
当然在运算中,所有的运算量都应该是binary.
下面分别来比较各种运算符:
【一】:按位与“&”,当二个运算量中相应的二进制位都为1的时候,则该位才是1,否则其他就是0;
如果是负数参加运算,则应该是以补码的形式表示为二进制,然后再进行按位的与的运算;
按位与的一些作用:
1:清零 2:取一个数中的某些指定位 3 :保留某个数中的制定位

【二】:按位或“|”,当二个运算量中相应的二进制位为1的时候,则该位运算结果是1,否则其他就是0;
【三】:按位异或“^”,该运算也称XOR运算符,二个二进制位同号,该位运算的结果则是0,异号则为1;
两个相应是否为“异”,为“异”就取值1,否则为假0;
按位异或的一些作用:
1:使特定的位翻转 2:与0相^,保留原值 3:交换两个值,不用临时变量
【四】:“取反”运算符,是一个单目元,用来对一个二进制数按位取反,对任何一个数应该先转化位二进制,再进行取反;这里值得一提的是取反的法则,就是将数据中的某位中的1变成0,0变成1,但是应该注意一点是将C的source移植到32位存放一个整数的计算机系统上的过程。为了使移植性加强,我们可以取得某一位时该数&&某数时,可以采用a=a&~1【举个例子】这种方法来取得最后一位。切记取反与正负号运算是不同的。
~运算符的优先级别比算术运算符,关系运算符,逻辑运算符和其他位运算符都高。
【五】:“左移运算符”,是指将一个数的各个二进位全部左移若干位,左移的过程中右边则补0,高位溢出舍弃不用。一般情况下【不包括左移高位溢出舍弃的数中不包含1的情况】左移N位后,使该数变成原来数的2的n次方倍。对于左移舍弃位中包含1的情况下,日后查询资料后再做研究:)
【六】:“右移运算符”,与左移运算相反,右移使原来的数缩小到原来数的2的n次方。但是应该注意右移的过程中要注意符号位的问题。对于无符号数,右移时左边高位移入0,对于有符号的值,如果原来符号为0【正数】,则左边也是移入0,如果时1【负数】,左边移入1,还是0这个就要取决所用到的计算机系统,移入0时称为【逻辑右移】,移入1时称为【算术右移】

最后对于不同长度的数据进行位运算的过程方法是:
系统一般都是采取右端对齐,例如:a&b,a位long,b为int,如果b为正数,左侧16位补满0,b为负数,左端应该补满1,b为无符号整数型,左侧填满0。

自己的一些见解:在位运算过程中,或者用到位标识的时候,一般都是针对该数二进制数的某一位进行运算,特别在通讯领域,系统本身就是要求缩减系统的大校位的使用就恰恰使这块得到广阔的使用空间。比如我们在一般的应用开发软件中,设置相应的”开关“,一般都是用布尔型或者使用一个short int型进行标识,但是在使用位的运算中,可以使用一个由几位组成的一个二进制数,由其中1位或者几位组成一个”开关“,所以说位的使用对于系统大小有严格要求的有一定的优势。