【C语言面试题】请使用宏定义实现字节对齐!

本文介绍了在C语言面试中遇到的一道关于字节对齐的笔试题。作者通过编写宏定义,在Ubuntu下用gcc编译并测试,成功实现了功能,能够准确判断非对齐的数值。文章最后提出了挑战,探讨如何将宏定义扩展到适用于任意非负整数的情况。
摘要由CSDN通过智能技术生成

最近博主在后台收到一位朋友的咨询,说他最近参加了一场技术面试,有这么一道笔试题:

请使用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 = 
  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

架构师李肯

您的鼓励是我前进的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值