C语言十六进制转换成十进制:要从右到左用二进制的每个数去乘以16的相应次方...

#include <stdio.h>
/*
十六进制转换成十进制:要从右到左用二进制的每个数去乘以16的相应次方;
在16进制中:a(A)=10 b(B)=11 c(C)=12 d(D)=13 e(E)=14 f(F)=15
例如:CE=12*16^1+14*16^0=192+14=206
*/

//右旋转把第一位 放到最后 0x2345 => 0x3452 num左移1位0x3450;即1个16进制位等于4个二进制位 
//或上 num右移3位0x0002 相当于3*4=12个二进制位
unsigned short int right(unsigned short int num, int n){
    return (num<<n) | (num>>(sizeof(num)*8-n));
}
//左转 0x2345=>0x5234 num左移3位(等于12个二进制位) num右移1位(4个二进制位)
unsigned short int left(unsigned short int num, int n){
    return ( num << (sizeof(num)*8-n)) | (num>>n);
}
int main(void)
{
    unsigned  short int  num = 0xFA;// 最多4个 0xFABCD 报错
    unsigned  short int  num2 = 0x2345; //short int 短整型占2个字节 共2*8=16个二进制位
     
    printf("您输入的十六进制数:%#x\n",num2);
    printf("%#x十六进制数转换成十进制为:%d\n",num2,num2);
     
    printf("该十六进制数占二进制位:%d 个位\n",sizeof(num2)*8);
	
	//0x2345占2个字节 0000 0000 0000 0000 16位
	
	printf("%#x右边旋转:%#x\n",num2,right(num2,4));
	
	printf("%#x左边旋转:%#x\n",num2,left(num2,4));
     
     
    return 0;
}

  

转载于:https://www.cnblogs.com/wanglijun/p/8476656.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值