C/C++运算符
前言
前几天在看《STL源码剖析》时看到一段这样的代码return ( (bytes) + __ALIGN - 1) & ~ (ALIGN -1)); //将bytes上调至8的倍数。虽然有注解,但当时对着这段代码真的是半天没有反应过来。直觉告诉我应该看看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
赋值运算符
其他运算符
运算符优先级