반응형

rand함수를 통해 임의 숫자 8개를 생성 시킨다.

생성시킨 8자리를 내림차순으로 정렬한다.

비트연산을 통해 정렬

 

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

/*
	비트연산을 통한
	랜덤 생성된 8자리 정수 내림차순 정렬하기
*/
int main(void)
{
	char input = 0;							// input : rand함수로 부터 입력받는 값
	unsigned int sort_a = 0, sort_b = 0;	// sort_a : 정렬된 정수, sort_b : 입력받은 정수
	unsigned int a = 0, b = 0;				// a, b : 2개의 정수 비교 변수(a - 낮은 자릿수, b- a보다 1자리 높은 자릿수)
	int i = 0, j = 0;						// i, j : for문 조건 변수
	int mask = 0x0000000f;					// mask : 비교한 자릿수를 0으로 채우기 위한 마스크값

	srand((unsigned)time(NULL));

	/*0~9까지 랜덤한 정수를 변수에 입력*/
	for (i = 0; i < 8; i++)
	{
		input = rand() % 10;

		sort_b = sort_b << 4;
		sort_b = sort_b + input;

		sort_a = sort_b;
	}


	/*4bit(nibble) 한자리씩 비교를 위한 for문 */
	for (j = 6; j >= 0; j--)
	{
		/*각각의 자릿수와 그 앞자릿수를 이동시켜서 a와 b에 저장*/
		for (i = 0; i < j + 1; i++)
		{
			a = (sort_a & (15 << i * 4));
			a = a >> i * 4;
			b = (sort_a & (15 << (i + 1) * 4));
			b = b >> (i + 1) * 4;

			/*a와 b의 값을 비교하여 낮은 자리의 값이 크면 두 자리를 변경*/
			if (a > b)
			{
				sort_a = sort_a & ~(mask << (i + 1) * 4);
				sort_a = sort_a | a << (i + 1) * 4;
				sort_a = sort_a & ~(mask << i * 4);
				sort_a = sort_a | b << i * 4;
			}
		}
	}

	printf("======================\n");
	printf("입력된 정수 : %08x\n", sort_b);
	printf("정렬된 정수 : %08x\n", sort_a);
	printf("======================\n");

	return 0;

}

(결과)

임의로 랜덤 생성된수와 자동으로 정렬 한 결과

(홀수 짝수를 구분하여 왼쪽 오른쪽 정렬 하고, 내림차순 정렬해주는 예제)

https://ansan-survivor.tistory.com/910

 

[C언어] 홀수 짝수 구분하여 sort시키기 예제 (랜덤수 생성, 비트연산)

랜덤으로 수를 생성한다 8자리까지. 수가 2개가 되면 양쪽을 비교하여 홀수일 경우 비트연산을 통해 왼쪽으로 이동시킨다. 비트연산 mask 기법을 사용. #include #include #include /* 입력받은 8자리 정수

ansan-survivor.tistory.com

 

 

 

 

반응형

+ Recent posts