有次去面试了一家公司,公司的面试题目里有这么一道题目
题目:有一个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;
}
大家看看有没有问题?