高手快来帮帮忙!(C程序)

【问题描述】假设unsignedshort类型占16位,x、y、z都是short类型。编写一程序,从键盘输入x,y的值(十进制形式),然后将x的高8位作为z的高8位,y的... 【问题描述】
假设unsigned short类型占16位,x、y、z都是short类型。编写一程序,从键盘输入x,y的值(十进制形式),然后将x的高8位作为z的高8位,y的高8位作为z的低8位,最后输出z的值(十进制形式)。
【输入形式】
以十进制形式输入x和y的值,以空格隔开。
【输出形式】
以十进制形式在新的一行上输出z值。
【输入样例】
840 2177
【输出样例】
776
【样例说明】
840的二进制形式为: 0000 0011 0100 1000
2177的二进制形式为: 0000 1000 1000 0001
将840的高8位作为结果的高8位,2177的高8位作为结果的低8位,
所以结果为:0000 0011 0000 1000,即十进制形式为:776

请诸位高手用标准的C程序格式回答问题!谢谢!
这个程序不用先给他们都转换成2进制,然后再用那个左移和右移运算符移动他们,再加一起,在转换城十进制再输出!

程序运行没问题,什么都没问题,就是通不过测试点的测试,怎么办啊?
展开
 我来答
lanzno
2006-03-17 · 超过14用户采纳过TA的回答
知道答主
回答量:125
采纳率:0%
帮助的人:61.7万
展开全部
#include <math.h>
#include <stdio.h>
void main()
{
unsigned short a[16],b[16],c[16],d[16],e[16],g[16],x,y,z=0,i;
printf("input x y\n");
scanf("%u%u",&x,&y);
c[0]=x,d[0]=y;
for(i=1;i<=15;i++) c[i]=c[i-1]/2;
for(i=1;i<=15;i++) d[i]=d[i-1]/2;
for(i=0;i<=15;i++) a[i]=c[i]%2;
for(i=0;i<=15;i++) b[i]=d[i]%2;
for(i=15;i>=8;i--) e[i]=a[i]*pow(2,i);
for(i=8;i<=15;i++) z=z+e[i];
for(i=15;i>=8;i--) g[i]=b[i]*pow(2,i-8);
for(i=8;i<=15;i++)
z=z+g[i];
printf("z=%u\n",z);
}

完全可以了
自己再测试一下

用位运算就不用什么算法了
很简单,我刚看了一下用位运算的方法
你自己去研究一下
flouse
2006-03-17
知道答主
回答量:40
采纳率:0%
帮助的人:16.5万
展开全部
用位运算你可以很轻松地达到目的!

参考资料: 谭浩强《C程序设计》

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式