最近博主在后台收到一位朋友的咨询,说他最近参加了一场技术面试,有这么一道笔试题:
请使用C语言的宏定义实现一个功能,求得某个整型数M在N字节对齐的时,它的值大小。
说明:
1.M是一个非负整数;
2.N是2的整数倍,值可能是1,2,4,8,16等等。
要求:
1.不得使用除法(/);
2.不能使用函数实现,只能用宏实现;
3.自行设计测试用例,明确得出测试用例执行成功与否。
刚好,今天比较清闲,茶余饭后,顺手撸了一把代码:
#include <stdio.h>
#include <stdlib.h>
/* max test number for aligned */
#define MAX_TEST_NUM 1000
/* default for 8 bytes */
#define DEF_ALIGNED_BYTES 8
/* n = 2/4/6/8/16/... */
#define GET_ALIGNED_2_POWER_NUM(num, n) (((num) + (n) - 1) & (~((n) - 1)))
int main(int argc, const char *argv[])
{
int i = 0;
int max_cnt =