位运算和关于两个数交换的多种方法

我们知道,位运算在计算中有着广泛的应用。在计算机的各种编程语言中位运算也是一种必不可少的运算,尤其是在计算机的底层实现代码中。

下面我们就来介绍一下位运算。

1.左移运算<< 左移右移都是移动二进制数

0000-0000 0000-0000 0000-0000 0000-1100 =12 向左移动一位变为(右边缺几位就补几个0)

0000-0000 0000-0000 0000-0000 0001 1000 =24 再向左移一位

0000-0000 0000-0000 0000-0000 0011 0000 =48

由此,我们可以得到,其实m向左移n位后,m=m*2^n;即每向左移一位,该数就会增到一倍。

2.右移运算和左移运算类似,但是也有一个区别。

0000-0000 0000-0000 0000-0000 0000-1100 =12 向右移一位

0000-0000 0000-0000 0000-0000 0000-0110 =6再向右移一位

0000-0000 0000-0000 0000-0000 0000-0011 =3再向右移动一位

0000-0000 0000-0000 0000-0000 0000-0001 =1

我们也可以得到一个规律,每向右移动一位,该数就会减小一倍(按计算机的整数规律减小)

>>向右移动的过程中,左边是补0还是1,是根据原来的数的最高位来确定的,原来数的最高位是1,则补1,否则补0

>>> 向右移动的过程中,不管原来数的最高位是1还是0,都补0,所以我们应该根据需要来选择,右移是用>>>还是>>.

3.&与运算

与运算同样都是对二进制位来说的。比如14&7=2(省略了前面的二进制位)

1010

&0111

—————-

0010

4.|或运算 与与运算类似(略)

5.~运算也都差不多

6.^异或运算,我们主要看一下异或运算 12^7=11

1100

^0111

————————–

1011

异或运算就是两个数不相同则为1,相同则为0。

0000-0000 0000-0000 0000-0000 0010-1011

我们都知道,只要将每四位一取,然后对每一项算出它的16进制,然后再合起来就是2进制的16进制的表现形式

上面的数据应该是 2 11

那计算机是怎样算的呢?这儿就是用&运算来完成的,

首先,将上数进行下面的与运算

0000-0000 0000-0000 0000-0000 0010-1011

&0000-0000 0000-0000 0000-0000 0000-1111

———————————————————————

0000-0000 0000-0000 0000-0000 0000-1011

这样,我们就把上面的数据的最后四位二进制位取出来了,然后进行计算就得到16进制的值

如果我们要把倒数的第二个四位二进制位取出来,那又该怎么取呢?

我们只需要把该书向右移四位,然后再取就ok了。非常简单吧,这也是位运算在计算机中的应用之一。

int a=8,b=2;

最普通的方法:int temp=a,a=b,b=temp,最简单最常用的,,不多说。

稍微高级一点的:a=a+b

b=a-b

a=a-b

再高级一点的位运算:a=a^b

b=a^b

a=a^b

这是为什么?

因为异或运算有一个特点,如下10^8=2

1010

^1000

————

0010

但是10^8^8=???? =10

0010

^ 1000

————-

1010

也就是说,n^m^m=n,神奇吧,慢慢领会就会了。

辽远或偏僻的地方,而会常常想起这一次的旅行,

位运算和关于两个数交换的多种方法

相关文章:

你感兴趣的文章:

标签云: