我正在尝试理解其他人的原始图像管理代码。
这是我正在查看的内容:
// Resolution has to be a power of 2.
// This code finds the lowest RxR resolution which has equal or more pixel than requested
uint32_t higher = std::max(resolutionX, resolutionY);
higher--;
higher |= higher >> 1;
higher |= higher >> 2;
higher |= higher >> 4;
higher |= higher >> 8;
higher |= higher >> 16;
higher++;
internResolution = higher;
据我了解,|=
是按位或运算符,>>
是右移运算符。我不明白的是为什么原始代码是这样设计的。我认为这将 Resolution
推向完美的 2 因数,并且我假设这将维持 Pixel perfect integer ratio logic ,但是这段代码似乎是一种奇怪的实现方式。
有人可以解释一下这里发生了什么,以及为什么要这样设计吗?这只是一种到达 "Smallest power of 2 greater than or equal to n" 的深奥方式吗?
最佳答案
比 2 的幂小 1 的数字左边全为 0,右边全为 1(例如 1112 = 7, 111111112 = 255)。
|=
运算符的序列将确保对于输入中的任何设置位,其右侧的所有位也将被设置 - 首先,将每个位向右复制 1,然后将每对位向右复制 2,然后复制 4,依此类推。结果将是一个小于 2 的幂的数字,并且它不会向左复制任何位,因此它将是 下一个 该形式的最高数字。
因此,减一,计算下一个小于二的幂,然后加一,实际上,您将得到下一个二的幂 >= 原始输入,在有效的方法。
关于c++ - 谁能解释一下这个图像分辨率设置代码?这到底是怎么回事,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66540931/