一C语言面试题的解答之我见

本文探讨了一个常见的面试题目:对于一个16位的整数,将其分为四段,每段四位,并实现一个函数来计算这四段的总和。提供了两种不同的解决方案并讨论了它们的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有次去面试了一家公司,公司的面试题目里有这么一道题目
题目:有一个16位的整数,每4位为一个数,写函数求他们的和。
大家都可以在网上找到这个题目,已经是被N多公司用了。

网上的答案是这样的:
解释:
整数1101010110110111
和 1101+0101+1011+0111
感觉应该不难,当时对题理解的不是很清楚,所以写了一个函数,也不知道对不对。
疑问:
既然是16位的整数,1101010110110111是2进制的,那么函数参数怎么定义呢,请大虾指教。
答案:用十进制做参数,计算时按二进制考虑。
/* n就是16位的数,函数返回它的四个部分之和 */
char SumOfQuaters(unsigned short n)
{
char c = 0;
int i = 4;
do
{
c += n & 15;
n = n >> 4;
} while (--i);

return c;

我有不同的答案。既然是16位的整数。也分有符号的和无符号的。
于是我是这么做的。
typedef struct {
 int a:4
 int b:4
 int c:4
 int d:4
} ABCD;
int main()
{
 int tosum=34,sum;
 ABCD *p=(ABCD *)malloc(sizeof(ABCD));
 memmov(p,tosum,sizeof(ABCD));
 sum=p->a+p->b+p->c+p->d;
 printf("the sum is %d/n",sum);
 return 0;
}

大家看看有没有问题? 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值