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