位运算
Posted tianqizhi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了位运算相关的知识,希望对你有一定的参考价值。
1.概念
位运算是指按二进制位进行的运算。因为在系统软件中,常要处理二进制位的问题。例如:将一个存储单元中的各二进制位左移或右移一位,两个数按位相加等。C语言提供位运算的功能,与其他高级语言(如PASCAL)相比,具有很大的优越性。
2.位运算符和位运算
(1)位运算符中除~以外,均为二目(元)运算符,即要求两侧各有一个运算量。
(2)运算量只能是整型或字符型的数据,不能为实型数据。
3.“按位与”运算符(&)
含义:参加运算的两个数据,按二进制位进行“与”运算。如果两个相应的二进制位都为1,则该位的结果值为1;否则为0。
例如:0&0=0,0&1=0,1&0=0,1&1=1
注意:3&5并不等于8,应该是按位与运算,如下
如果参加&运算的是负数(如-3&-5),则要以补码形式表示为二进制数,然后再按位进行“与”运算。
用途:
- 清零:若想对一个存储单元清零,即使其全部二进制位为0,只要找一个二进制数,其中各个位符合以下条件:原来的数中为1的位,新数中相应位为0。然后使二者进行&运算,即可达到清零目的。例如:要求将二进制数11100101的第2位清零。
- 取一个数中某些指定位。例如:我们需要对一个字型数据取出其低8位的值时,我们可以这么做。
4.“按位或”运算符(|)
两个相应的二进制位中只要有一个为1,该位的结果值为1。即:0|0=0,0|1=1,1|0=1,1|1=1。例如:
5.“异或”运算符(∧)
异或运算符∧也称XOR运算符。
它的规则是:若参加运算的两个二进制位同号则结果为0(假),异号则结果为1(真)。即:0∧0=0,0∧1=1,1∧0=1, 1∧1=0。例如:
6.∧运算符应用
- 使特定位翻转
设有01111010,想使其低4位翻转,即1变为0,0变为1。可以将它与00001111进行∧运算,即: - 与0相∧,保留原值
例如:因为原数中的1与0进行∧运算得1,0∧0得0,故保留原数。 -
交换两个值,不用临时变量
例如:a=3,b=4,现在想将a、b变量的值交换位置,我们传统的做法是定义多一个temp变量,而现在temp去度蜜月了,怎么办?
我们可以这样做:
a=a∧b;
b=b∧a;
a=a∧b; 这种方法也常应用于加密算法。
以上是关于位运算的主要内容,如果未能解决你的问题,请参考以下文章
Java位运算:位异或运算位与运算位或运算位取反运算左位移运算右位移运算无符号右移运算不用额外变量交换两个整数的值(使用位异或运算)只出现一次的数字
Java位运算:位异或运算位与运算位或运算位取反运算左位移运算右位移运算无符号右移运算不用额外变量交换两个整数的值(使用位异或运算)只出现一次的数字