位运算

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/BestFM/article/details/81127165

程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算就是直接对整数在内存中的二进制位进行操作。
####运算符号

按位与         &        a&b
按位或         |        a|b
按位异或       ^        a^b
按位取反       ~         ~a
左移          <<        a<<b
右移          >>        a>>b

#####按位与运算
与运算就是将两个数据,按照对应的二进制数逐位进行逻辑与运算,相同位的两个数字都为1,则为1;若有一个不为1,则为0。

        11010
     &  10110
        10010

通常可以用&1来判断一个数的奇偶。

#####按位或运算
或运算就是将两个数据,按照对应的二进制数逐位进行逻辑与运算,相同位的两个数字都为0,则为0;若有一个为1,则为1。

        11010
     |  10110
        11110


#####按位异或运算
异或运算就是将两个数据,按照对应的二进制数逐位进行逻辑异或运算,相同位的两个数字相同,则为0;不同,则为1。可以用于将二进制数中的某一位取反。

        11010
     ^  10110
        01100

下面的运算可以实现两个数的交换

        a=a^b;
        b=a^b;
        a=a^b;


#####按位取反运算
取反运算就是将一个数据,按照对应的二进制数逐位进行逻辑取反运算,即0变为1,1变为0;进行此运算时,要特别注意数据的符号,如果为负,要转换为其补码。补码=符号位(最高位)以后按位取反再加1。

                    就以-1为例
二进制 :1000 0000 0000 0000 0000 0000 0000 0001 
补  码 :1111 1111 1111 1111 1111 1111 1111 1111

      ~  11010
         00101


#####左移运算
a << b就表示把a转为二进制后左移b位(在后面添b个0)。a << b的值就是a乘以2的b次方,

     1100100<<2   十进制为100
     110010000    十进制为400


#####右移运算
a >> b表示二进制右移b位(去掉末b位),相当于a除以2的b次方(取整)。

     1100100>>2   十进制为100
       11001      十进制为25


#####运算优先级

     1       ~
     2      <<、>>
     3       &
     4       ^
     5       |

阅读更多
换一批

没有更多推荐了,返回首页