高八位低八位互换用加法的问题
#include<stdio.h>int main()
{int t=1,NUM;
unsigned short x,x1,x2;
scanf("%d",&NUM);
while(t<=NUM)
{ scanf("%hu",&x);
x1=x>>12;
x2=x<<12;
x=(((x<<4)>>8)<<4)+x1+x2;
printf("%hu\n",x);
t++;
}
return 0;
}
这题我用逻辑尺可以做,我又试了试用加法,就有些情况可以,有些情况不行,请问事为什么呢?
样例:
输入 输出(正确)
1024 1024(1024)
1234 9424(9424)
5678 63009(58913)
5695 1585(63025)
我也算了他们的二进制
1024 :0000 0100 0000 0000
1234 :0000 0100 1101 0010 —— 9244 : 0010 0100 1101 0000
5678 :0001 0110 0011 1110 —— 63009 :1111 0110 0010 0001 —— 58913 : 1110 0110 0011 0001
5695 :0001 0110 0011 1111 —— 1585 : 0000 0110 0011 0001 —— 63025 : 1111 0110 0011 0001
谢谢各位!