Algospot-Endians
알고스팟 초보용 문제인데, &(AND연산), >>,<<(SHIFT연산) 을 써서 프로그래밍을해본 적이 없어서 많이 해맸습니다.
프로젝트 오일러보다 어려운거 같아요
#include <stdio.h>
int main()
{
int count=0;
int num = 0;
unsigned int result = 0;
unsigned int base[4] = { 0xFF,0xFF00,0xFF0000,0xFF000000 };
scanf_s("%d", &count);
for (int i = 0; i < count; i++) {
scanf_s("%d", &num);
result = ((num&base[0]) << 24) + ((num&base[1]) << 8) + ((num&base[2]) >> 8) + ((num&base[3]) >> 24);
printf("%u\n", result);
}
return 0;
}
해설:
((num&base[0]) << 24)를 하면 base[0]은 0xFF이므로 1111 1111, 즉 8bit 이다. 따라서 이 base[0]과 입력한 수를 AND연산하면 입력한 수의 8비트를 제외하고는 0이 된다.AND연산은 둘다 1이여야 1로 세팅된다.
그리고 이것을 L SHIFT연산을 하여 24바이트 왼쪽으로 옮긴다. 예를 들어 0001 << 4 는
1000이 된다.
따라서 24바이트 왼쪽 쉬프트 연산을 한다. (맨 앞으로 보내기 위해, 즉 위치를 바꿔주기 위해)
하나를 더 보면 ((num&base[1]) << 8)에서 base[1]은 0xFF00 , 즉 1111 1111 0000 0000 16bit이다. 이것과 입력한 수를 AND연산하면 XXXX XXXX 0000 0000가 되고 이를 왼쪽 쉬프트 연산 8만큼하면 위치가 바뀌가 되는 원리이다.
0 개의 댓글