Programming/Codeup.kr기초100제 && 컴퓨터 이야기

[기초-비트단위논리연산] 비트단위로 xor 하여 출력하기 && 네트워크

피터파스칼 2016. 12. 29. 13:16

네트워크(Network)는 전자신호로 통신하는 분산된 기기들이 서로 통신하기 위해 만든 하나의 망을 의미한다. 이름에서 알 수 있듯이 거미줄처럼 얽힌 회선이란 뜻이다. 규모에 따라 다음과 같이 나뉜다.

●WAN(Wide Area Network) 광역통신망

국가, 대륙등 넓은 지역을 연결하는 네트워크이다. 가장 상위단위에 속하며 규모가 제일 크다. 전화선도 전국에 깔려있으니 여기에 속한다.

●MAN(Metropolitan Area Network) 도시권 통신망

도시 각각에 설치되어 있는 통신망을 의미한다. 원래 없던 개념이었으나 각 도시마다 기지국을 이용해 휴대전화를 사용하여야 하기 때문에 용어가 생겨났다.

●LAN(Local Area Network) 근거리 통신망

일반적으로 한 사무실 또는 한 가정내의 네트워크를 부른르는 말이다. 1964년 리버모어 연구소에서 핵무기 연구를 지원하기위해 최초로 랜 서비스를 사용했다. 근거리 기준이 애매하기 때문에 미국 전기전자 기술협의(IEEE)와 국제 표준화기구(ISO)는 이렇게 정의한다. '한정된 지역에서 여러 전자기기 사이의 자유로운 정보교환, 구축한 사용자가 직접 관리,운영해야하며 다른 밴더간의 기기간에도 통신가능해야함'

문제 설명

입력 된 정수 두 개를 비트단위로 xor 연산한 후 그 결과를 정수로 출력해보자.

입력

두 개의 정수가 공백을 두고 입력된다.
(-2147483648 ~ 2147483647)

출력

두 정수를 비트단위로 xor 계산을 수행한 결과가 10진수로 출력된다.

입력 예시

3 5

출력 예시

6

도움말

비트단위(bitwise) 연산자 ^(xor, circumflex/caret 서컴플렉스/캐럿 이라고 읽는다.)를 붙이면 된다.

** 주의 ^ 은 수학식에서 거듭제곱(power)을 나타내는 기호와 모양은 같지만,
C언어에서는 전혀 다른 배타적 논리합(xor, 서로 다를 때 1)의 의미를 가진다. 참고로 파이썬에서 거듭제곱은 **로 나타낸다. C에선 math라이브러리를 불러와 pow()함수를 써야한다.

** 비트단위(bitwise) 연산자는,
~(bitwise not), &(bitwise and), |(bitwise or), ^(bitwise xor), <<(bitwise left shift), >>(bitwise right shift) 가 있다.


예를 들어 3과 5가 입력되었을 때를 살펴보면
3 : 00000000 00000000 00000000 0000011
5 : 00000000 00000000 00000000 0000101
3^5 : 00000000 00000000 00000000 0000110
이 된다.


이러한 비트단위 연산은 빠른 계산이 필요한

그래픽처리에서도 효과적으로 사용된다.


구체적으로 설명하자면,

두 장의 이미지가 겹쳐졌을 때, 색이 서로 다른 부분만 처리할 수 있도록 만들어줄 수 있는데,

배경이 되는 그림과, 배경 위에서 움직이는 그림이 있을 때,

두 그림에서 차이만 골라내, 배경 위에서 움직이는 그림의 색으로 바꿔주면,

전체 그림을 구성하는 모든 점들의 색을 다시 계산해 입히지 않고,

보다 효과적으로 그림을 처리할 수 있게 되는 것이다.

비행기 슈팅게임 등을 생각해보면 된다.