c语言_面试_十进制转换为二进制_数据取反(位域操作)

一、十进制转换为二进制

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;
}
发布了142 篇原创文章 · 获赞 11 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_38293453/article/details/104344490
今日推荐