码迷,mamicode.com
首页 > 其他好文 > 详细

位运算之 C 与或非异或

时间:2015-03-15 23:43:43      阅读:382      评论:0      收藏:0      [点我收藏+]

标签:

位运算比较易混:

位运算之 C 与或非异或  

与运算:&
两者都为1为1,否则为0
1&1=1,  1&0=0,  0&1=0,  0&0=0

或运算:|
两者都为0为0,否则为1
1|1 = 1,  1|0 = 1,  0|1 = 1, 0|0 = 0

非运算:~
1取0,0取1
~1 = 0, ~0 = 1
~(10001) = 01110

异或运算:^
两者相等为0,不等为1(易混淆)
1^1=0, 1^0=1, 0^1=1, 0^0=0

位移操作符:<<与>>

位运算是指按二进制进行的运算。在程序中,常常需要处理二进制位的问题。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

 

    代码示例如下:

  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)

实例参考:位运算符(一):C/C++位运算符 - jason的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/jason314/article/details/5719933


位运算之 C 与或非异或

标签:

原文地址:http://blog.csdn.net/lxw907304340/article/details/44279371

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!