大佬教程收集整理的这篇文章主要介绍了c – 将无符号整数舍入为2的幂次序,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
struct Node { Node* Next; void* Data; const unsigned Size; }; Node* m_Buffers[16];
这意味着m_Buffers [0]的缓冲区大小为32,m_Buffers [1]的缓冲区大小为64,依此类推.
并且一个函数接受一个数字并返回一个指定数字可以舍入到的大小的缓冲区.
void * GetBuffer(unsigned sizE) { // ... }
例如,如果我请求一个384的缓冲区,那么我需要能够在512处舍入它并从m_Buffers [4]返回一个缓冲区.
到目前为止,我正在使用循环来舍入:
void * GetBuffer(unsigned sizE) { unsigned buffer_size = 32; while (buffer_size < sizE) { buffer_size *= 2; } // ... }
但我很好奇是否有一种更好的方法可以不涉及循环.如果有一种方法可以将舍入数字转换为数组中的索引而不使用switch语句.
说实话,我甚至不确定标题是否正确.所以我为此道歉.
unsigned int v; v--; v |= v >> 1; v |= v >> 2; v |= v >> 4; v |= v >> 8; v |= v >> 16; v++;
这个想法是在低于MSB本身的所有位置“粘贴”v-1的最高位(MSB),这产生了2k-1的形式.之后,数字递增以得到最终结果.
以上是大佬教程为你收集整理的c – 将无符号整数舍入为2的幂次序全部内容,希望文章能够帮你解决c – 将无符号整数舍入为2的幂次序所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。