前言
在网上看到这样一道题,不是很明白原理,记录一下。
参考文章
题目和答案来自这篇文章:
【C语言面试题】请使用宏定义实现字节对齐!】
题目
请使用C语言的宏定义实现一个功能,求得某个整型数M在N字节对齐的时,它的值大小。
说明:
1.M是一个非负整数;
2.N是2的整数倍,值可能是1,2,4,8,16等等。
要求:
1.不得使用除法(/);
2.不能使用函数实现,只能用宏实现;
3.自行设计测试用例,明确得出测试用例执行成功与否。
答案
#define GET_ALIGNED_2_POWER_NUM(num, n) (((num) + (n) - 1) & (~((n) - 1)))
探究
题目的意思
求得某个整型数M在N字节对齐的时,它的值大小。
一开始我没懂这句话的意思,最开始我认为,一个int型,值为2,即使4字节对齐后,值不还是2吗?
但是实际上这里求的是,某个整型数M(指的是一个变量的size大小是M),按照N字节对齐后,占用的字节数。
例如一个int变量,占用4字节,
按照2字节对齐后,占用4字节‘
按照8字节对齐后,占用8字节;
按照16字节对齐后,占用16字节。
那么,答案中宏的计算,是什么意思呢
这里在重复一下参数的意思,num:需要对齐的数据的大小,n字节对齐的条件(N是2的整数倍)。
预期的对齐效果:
如果num小于n,那么最

本文解析了一道关于如何使用C语言宏定义实现整型数按指定字节对齐功能的面试题,通过实例和探究,解释了宏计算背后的逻辑,以及为何需要加上(n-1)操作来确保正确处理特殊情况。
681

被折叠的 条评论
为什么被折叠?



