一、十进制转换为二进制
char * changeNumTOhex(int num, int *numCounter)
{
char *pArry = (char *)malloc(sizeof(char));
for (int i = 0;; i++)
{
pArry[i] = num % 2;
num = num / 2;
if (num != 0)
{
pArry = (char*)realloc(pArry, i + 2);
}
else
{
*numCounter = i + 1;
break;
}
}
char *pArr = (char *)malloc((*numCounter)*sizeof(char));
for (int i = 0; i < (*numCounter); i++)
{
pArr[i] = pArry[(*numCounter) - 1 - i];
}
free(pArry);
return pArr;
}
void displayNum(char *pArry, int numCounter)
{
for (int i = 0; i < numCounter; i++)
{
printf("%d", pArry[i]);
}
printf("\n");
}
二、数据取反(位域操作)
typedef union
{
char uint8Num;
struct
{
int bit0 : 1;
int bit1 : 1;
int bit2 : 1;
int bit3 : 1;
int bit4 : 1;
int bit5 : 1;
int bit6 : 1;
int bit7 : 1;
}u8Bit;
}u8Num;
char changeBit(char num)
{
u8Num tNum;
tNum.uint8Num = num;
tNum.u8Bit.bit0 = ~tNum.u8Bit.bit0;
tNum.u8Bit.bit1 = ~tNum.u8Bit.bit1;
tNum.u8Bit.bit2 = ~tNum.u8Bit.bit2;
tNum.u8Bit.bit3 = ~tNum.u8Bit.bit3;
tNum.u8Bit.bit4 = ~tNum.u8Bit.bit4;
tNum.u8Bit.bit5 = ~tNum.u8Bit.bit5;
tNum.u8Bit.bit6 = ~tNum.u8Bit.bit6;
tNum.u8Bit.bit7 = ~tNum.u8Bit.bit7;
return tNum.uint8Num;
}
char changeBit(char num)等效于 num = ~num;
三、测试
int _tmain(int argc, _TCHAR* argv[])
{
int snum;
int numCount = 0;
int *numCounter = &numCount;
printf("please input 十进制 number:");
scanf_s("%d",&snum);
char *num = changeNumTOhex(snum, numCounter);
displayNum(num, numCount);
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
unsigned short num=8;
scanf_s("%hu", &num);
printf("%hhu\n", num);
int numCounter=0;
char * caNum = changeNumTOhex(num, &numCounter);
displayNum(caNum, numCounter);
num= changeBit(num);
//num = ~num;
printf("%hhu\n", 0xff&num);
int numCounter2 = 0;
char * caNum2 = changeNumTOhex(num, &numCounter2);
displayNum(caNum2, numCounter2);
return 0;
}