算式求解之数据集合扩容算式--(((s)+3)&~3)
容量扩容算式
(((s)+3)&~3)
分析如下:
1.首先: 一元运算符 + - ! ~ ++ - - (type)* & sizeof 是从右到左进行计算
2. 3执行补码运算符 0011的补码是 1111 1111 1111 1100。这个补码代表的含义是:1111 1111 1111 1100 肯定是4的倍数
3. &二进制 AND 运算符 s+3 大于3的数和3的补码进行与操作,结果也肯定是4的倍数。
4. 任何数和4的倍数进行与操作,都是4的倍数。
#include <iostream>
#define PAD_SIZE(s) (((s)+3)&~3)
/*
* 1.首先: 一元运算符 + - ! ~ ++ - - (type)* & sizeof 是从右到左进行计算
* 2. 3执行补码运算符 0011的补码是 1111 1111 1111 1100。这个补码代表的含义是:1111 1111 1111 1100 肯定是4的倍数
* 3. &二进制 AND 运算符 s+3 大于3的数和3的补码进行与操作,结果也肯定是4的倍数。
* 4. 任何数和4的倍数进行与操作,都是4的倍数。
*/
int main()
{
int len = 16;
int padded = PAD_SIZE(len);
std::cout << "len=" << len << ",padded=" << padded << "\n";
len = 17;
padded = PAD_SIZE(len);
std::cout << "len=" << len << ",padded=" << padded << "\n";
len = 18;
padded = PAD_SIZE(len);
std::cout << "len=" << len << ",padded=" << padded << "\n";
return 0;
}
执行结果:
$ ./helloworldc++.out
len=16,padded=16
len=17,padded=20
len=18,padded=20