位运算符介绍(一):C/C++位运算符

    位运算是指按二进制进行的运算。在程序中,常常需要处理二进制位的问题。C/C++语言提供了6个位操作运算符。这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型。

    在实际应用中,建议用unsigned整型操作数,因为带符号操作数可能因为不同机器结果不同。

    c++和c的位操作运算符完全相同,但c++中增加了bitset标准库来支持位集操作,具体内容请参考http://book.51cto.com/art/200809/88698.htm或者http://book.csdn.net/bookfiles/17/1001760.shtml,这些链接都是《C++ Primer中文版》中的内容,大家也可以直接看书。

    下面是C/C++位操作运算符列表,其中运算符优先级为从上到下递减,但<<,>>优先级相同。

C/C++位操作运算符

操作符功能用法
~位求反~expr
<<左移expr1 << expr2
>>右移expr1 >> expr2
&位与expr1 & expr2
^位异或expr1 ^ expr2
|位或expr1 | expr2

 

    代码示例如下:

 

《位运算符介绍(一):C/C++位运算符》
《位运算符介绍(一):C/C++位运算符》
代码

   
    
     1 
    #include
    <
    iostream
    >
    
2   using namespace std;
3   int main(){
4 unsigned short x = 3 ,y = 5 ;
5 cout << " ~x= " << (unsigned short ) ~ x << endl; // 位求反
6   cout << " ~x= " <<~ x << endl; // 位求反
7   cout << " x&y= " << (x & y) << endl; // 位与
8   cout << " x^y= " << (x ^ y) << endl; // 位异或
9   cout << " x|y= " << (x | y) << endl; // 位或
10   cout << " x<<1= " << (x << 1 ) << endl; // 位左移
11   cout << " y>>1= " << (y >> 1 ) << endl; // 位右移
12   return 0 ;
13 }

    运算结果如下:

~x=65532

~x=-4

x&y=1

x^y=6

x|y=7

x<<1=6

y>>1=2

    代码解释如下:
    short为16位整数,故x,y的二进制表示如下:
    x=3(00000000 00000011)
    y=5(00000000 00000101)

      ~ 00000000 00000011
      = 11111111 11111100(65532或者-4)(至于为什么同样的二进制位表示的数不一样,这与计算机的数值表示有关,具体原因可搜索“补码”)

         00000000 00000011
      & 00000000 00000101
      = 00000000 00000001(1)

         00000000 00000011
      ^ 00000000 00000101
      = 00000000 00000110(6)

         00000000 00000011
      |  00000000 00000101
      = 00000000 00000111(7)

         00000000 00000011<<1
      = 00000000 00000110(6)

         00000000 00000101>>1
      = 00000000 00000010(2)

    原文作者:位运算
    原文地址: https://www.cnblogs.com/thujason/archive/2010/07/08/1773529.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞