写这篇博客主要是想巩固一下有关unsigned以及进制的知识
任务描述
本关任务:编写完整的程序,从终端输入一个无符号短整数k
,输出将k
的高4
位和低4
位交换后的结果。例如,程序执行时: 输入:54321
(对应二进制为11010100 00110001
); 输出:5181
(对应二进制为00010100 00111101
)。
unsigned short所占大小为2byte,即16位。在计算机中第一位用于存储符号,而unsigned类型无符号,故第一位为二进制首位。
进行交换时注意要将补0的位数留好,如12:0000 0000 0000 1100,交换后为:1100 0000 0000 0000。
代码如下:
#include <stdio.h>
#include <math.h>
int main(){
unsigned short k;
int a[16]={0};
scanf("%u",&k);
for( int i=15 ; k>0 ; i-- ){
a[i]=k%2;
k/=2;
}
int t[4];
for( int i=0 ; i<4 ; i++ ){
t[i]=a[i];
a[i]=a[i+12];
a[i+12]=t[i];
}
k=0;
for( int i=0 ; i<16 ; i++ )
k+=a[i]*pow( 2 , 16-1-i );
printf("%u",k);
return 0;
}