[기초-비트단위논리연산] 비트단위로 xor 하여 출력하기 && 네트워크
네트워크(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
이 된다.
이러한 비트단위 연산은 빠른 계산이 필요한
그래픽처리에서도 효과적으로 사용된다.
구체적으로 설명하자면,
두 장의 이미지가 겹쳐졌을 때, 색이 서로 다른 부분만 처리할 수 있도록 만들어줄 수 있는데,
배경이 되는 그림과, 배경 위에서 움직이는 그림이 있을 때,
두 그림에서 차이만 골라내, 배경 위에서 움직이는 그림의 색으로 바꿔주면,
전체 그림을 구성하는 모든 점들의 색을 다시 계산해 입히지 않고,
보다 효과적으로 그림을 처리할 수 있게 되는 것이다.
비행기 슈팅게임 등을 생각해보면 된다.