无符号整数高四位与低四位转换

写这篇博客主要是想巩固一下有关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;
}

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值