zoukankan      html  css  js  c++  java
  • 位运算之 C 与或非异或

    View Code
    位运算比较易混:
    
    位运算之 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 代码示例如下: [cpp] view plaincopy #include<iostream> using namespace std; int main(){ unsigned short x=3,y=5; cout<<"~x="<<(unsigned short)~x<<endl;//位求反 cout<<"~x="<<~x<<endl;//位求反 cout<<"x&y="<<(x&y)<<endl;//位与 cout<<"x^y="<<(x^y)<<endl;//位异或 cout<<"x|y="<<(x|y)<<endl;//位或 cout<<"x<<1="<<(x<<1)<<endl;//位左移 cout<<"y>>1="<<(y>>1)<<endl;//位右移 return 0; } [cpp] view plain copy #include<iostream> using namespace std; int main(){ unsigned short x=3,y=5; cout<<"~x="<<(unsigned short)~x<<endl;//位求反 cout<<"~x="<<~x<<endl;//位求反 cout<<"x&y="<<(x&y)<<endl;//位与 cout<<"x^y="<<(x^y)<<endl;//位异或 cout<<"x|y="<<(x|y)<<endl;//位或 cout<<"x<<1="<<(x<<1)<<endl;//位左移 cout<<"y>>1="<<(y>>1)<<endl;//位右移 return 0; } 运算结果如下: ~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
  • 相关阅读:
    zookeeper安装教程
    CentOS7服务管理(重启,停止,自动启动命令)
    redis配置文件详解
    阿里云 CentOS7安装redis4.0.9并开启远程访问
    rpm命令
    wget命令
    yum命令
    maven项目debug调试不能够进入源码问题解决
    8-字符串
    7-数组
  • 原文地址:https://www.cnblogs.com/bytebee/p/8194770.html
Copyright © 2011-2022 走看看