C/C++运算符

前言

前几天在看《STL源码剖析》时看到一段这样的代码return ( (bytes) + __ALIGN - 1) & ~ (ALIGN -1)); //将bytes上调至8的倍数。虽然有注解,但当时对着这段代码真的是半天没有反应过来。直觉告诉我应该看看C/C++的运算符了(刚开始学C/C++的时候看完书上常用的运算符就没看别的了,现在来补课了。出来混果然是要还的)。这里主要复习位运算符的知识,其他的运算符,各位可以用代码试一试。

 

算数运算符

C/C++运算符

 

关系运算符

C/C++运算符

 

逻辑运算符

C/C++运算符

 

位运算符

C/C++运算符

C/C++运算符

代码如下:

#include <iostream>
using namespace std;

int main()
{
    int A = 60, B = 13;
    cout << "A&B: " << (A & B) << endl;
    cout << "A|B: " << (A | B) << endl;
    cout << "A^B: " << (A ^ B) << endl;
    cout << "~A:  " << ~A << endl;
    cout << "A<<2:  " << (A<<2) << endl;
    cout << "A>>2:  " << (A>>2) << endl;
    return 0;
}

转化为二进制分析:

十进制:A = 60, B = 13
二进制:A = 0011 1100
二进制:B = 0000 1101

     A&B = 0000 1100 
     A|B = 0011 1101
     A^B = 0011 0001   //异或,相同为0,不同为1
      ~A = 1100 0011   //取反

现在再看看《STL源码剖析》中的 return ( (bytes) + __ALIGN - 1) & ~ (ALIGN -1));  //  有定义enum { __ALIGN = 8 };

这里将代码分成两部分 [(bytes) + __ALIGN - 1)] & [~(ALIGN -1)]

其中bytes是我们输入的值

当我们输入的bytes = 13时,先将和20转化成二进制:10100   //占5位
7的二进制为:00111   所以~(7):11000

20     10100
~(7)   11000
&
16     10000     //结果是16

 

赋值运算符

C/C++运算符

 

其他运算符

C/C++运算符

 

运算符优先级

C/C++运算符

图片来自:http://www.runoob.com/cplusplus/cpp-operators.html