向群饭店:高手快来帮帮忙!(C程序)

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/03 03:05:41
【问题描述】
假设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进制,然后再用那个左移和右移运算符移动他们,再加一起,在转换城十进制再输出!

程序运行没问题,什么都没问题,就是通不过测试点的测试,怎么办啊?

#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);
}

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

用位运算就不用什么算法了
很简单,我刚看了一下用位运算的方法
你自己去研究一下

用位运算你可以很轻松地达到目的!