相关疑难解决方法(0)

给定一个整数,如何使用bit-twiddling找到下一个最大的2的幂?

如果我有一个整数n,我怎样才能找到的下一个号码k > n,使得k = 2^i,其中一些i的元件N由按位移动或逻辑.

示例:如果我有n = 123,我怎么能找到k = 128,哪个是2的幂,而不是124哪个只能被2整除.这应该很简单,但它让我望而却步.

language-agnostic bit-manipulation

73
推荐指数
6
解决办法
4万
查看次数

将C++结构填充为2的幂

我正在为嵌入式系统开发一些C++代码.代码使用的I/O接口要求每条消息的大小(以字节为单位)是2的幂.现在,代码执行类似的操作(在几个地方):

#pragma pack(1)
struct Message
{
   struct internal_
   {
      unsigned long member1;
      unsigned long member2;
      unsigned long member3;
      /* more members */
   } internal;
   char pad[64-sizeof(internal_)];
};
#pragma pack()
Run Code Online (Sandbox Code Playgroud)

我正在尝试首次在64位Fedora上编译代码,其中long64位.在这种情况下,sizeof(internal_)大于64,数组大小表达式下溢,并且编译器抱怨数组太大.

理想情况下,我希望能够编写一个宏来获取结构的大小,并在编译时评估填充数组所需的大小,以便将结构的大小舍入为2的幂.

我看过Bit Twiddling Hacks页面,但我不知道是否有任何技术可以在宏中实现,以便在编译时进行评估.

这个问题的任何其他解决方案?或者我应该延续这个问题,只需将神奇的64改为神奇的128?

c++ struct bit-manipulation padding

10
推荐指数
4
解决办法
3591
查看次数