有人能解释一下这是什么意思吗?
#define ROUNDUP(n,width) (((n) + (width) - 1) & ~unsigned((width) - 1))
有人能解释一下这是什么意思吗?
#define ROUNDUP(n,width) (((n) + (width) - 1) & ~unsigned((width) - 1))
~unsigned((width) - 1)
等于0,从而使整个结果为0。 - JPvdMerwewidth = 0
时,才会发生我所说的情况。 - JPvdMerwe这段代码定义了一个名为ROUNDUP
的宏,它接受两个参数n
和width
,并返回值(n + width - 1) & ~unsigned(width - 1)
。
:)
如果您认为自己知道它的作用,请尝试一下:
std::string s("WTF");
std::complex<double> c(-11,5);
ROUNDUP(s, c);
它将 n 四舍五入到下一个“width” - 但我认为 width 需要是 2 的幂次方。
例如,当 width == 8,n = 5 时:
(5 + 8 - 1) & ~(7) = 12 & ~7 = 8
因此,5 被四舍五入到 8。任何介于 1 - 8 的数字都会被四舍五入到 8。9 到 16 会被四舍五入到 16。以此类推。(0 不会被四舍五入)
由于使用了unsigned
,所以它在C
中无法工作。只要width
限制为2的幂次方,它就能实现以下功能:
n width ROUNDUP(n,width)
----------------
0 4 0
1 4 4
2 4 4
3 4 4
4 4 4
5 4 8
6 4 8
7 4 8
8 4 8
9 4 12
10 4 12
11 4 12
12 4 12
13 4 16
14 4 16
15 4 16
16 4 16
17 4 20
18 4 20
19 4 20