1)map_1 과 map_2의 배열에 각각의 상수 값을 입력한다..
2) map_1과 map _2의 상수 값을 각각 XOR 연산 을 한다.
=> 여기서 중요한 사실은 위의 15line에서 볼수 있듯이 or 연산 한 값에 & 연산 한 값을 빼면 XOR 값을 얻을수 있다.
저 또한 몰랐던 사실 이고 , 이글을 보고 모르셧던 분들은 알고 가시면 좋을거 같습니다.!
3)XOR 계산값을 담을 Temp[5] 변수가 필요하다.
4)XOR 한 값을 비트연산을 하여 2차배열 result[5][5] 값을 저장 한다.
=> 비트 연산의 결과 값을 저장 하려면 마스크가 필요 한데, Mask = 1 로지정을 한다.
&연산의 경우 곱해서 1이 나와야 1로 표기가 되기 때문이다. ( 1의 2진수 값이 0001) 이므로 계산하기 용이하다 .
5)result[5][5] 2차배열에 비트단위의 값을 저장한다.
=> Mask 는 준비 하였고 , 이젠 XOR에 담긴 상수 값과 mask를 비교하여 결과값을 얻을 차례다.
XOR 의 계산 값 과 Mask를 &연산 한다.
하지만 한바이트 씩 끊어 내야 하므로, XOR의 결과 값은 마스크와 비트연산 후 1칸씩 쉬프트 연산으로
1칸씩 이동 하여야 한다.
여기서 중요한점은 마스크느 00001 로서 항상 고정값으로 있어야 한다 왜냐하면 항상 끝자리를 &연산으로 같으면 1 아니면 0이 나오게 해야 하므로 따라서 &연산 한번 하고 난후 제일 끝자리는 필요가 없어지게 되며로 >>1 오른쪽으로 한칸 밀어 준다!
EX) 10111 의 이진수로 표기된 값의 비트 단위로 받을려면
>>1 오른쪽 방향으로 한칸 이동하여 1맨 앞의 1을 버려 버리고 0111 만 남게 되는 원리이다.
풀이과정이 이해가 잘 안가시는분들 댓글로 달아 주시면
알고 있는 선에서 최대한 설명 드리겠습니다.
'프로그래밍 _공부자료. > C++ 공부' 카테고리의 다른 글
백준넷 10828번 push pop back 이중연결 리스트로 구현하기. (0) | 2019.11.28 |
---|---|
배열의 숫자 의 차 최대치 구하기. (0) | 2019.11.27 |
은행 ATM기 C++로 작성. (0) | 2019.11.25 |
역 방향 행렬 360도 회전하기. (0) | 2019.11.25 |
C++ 행렬 회전 하기. (0) | 2019.11.24 |
댓글