자기전에 침대에 누워 핸드폰을 보고 있었는데, 갑자기 문득 든 생각 “컴퓨터는 어떻게 연산을 하는거지?” 나같은 사람이 있을거 같기도 하고 그냥 궁금할거 같아서 준비했다. 틀린 부분이나 피드백이 있다면 댓글로 알려주면 감사하겠다!
일단 우리가 컴퓨터가 어떻게 연산을 하는지 알기 위해선 비트 연산자에 대해 알 필요가 있다.
컴퓨터가 이진법을 사용한다는 사실은 이 글을 읽는 모두가 알고 있을 것이고,,
비트 연산자는... 음..
솔직히 나같은 경우에는 쓸 일이 없어서 그냥 이름만 듣고 넘겼었는데,,
이번 기회에 한번 알아보도록 하자!
다들 컴퓨터에서 가장 작은 단위가 1bit인건 알고 있겠지요?
그거 가지고 논리 연산을 할 수 있게 만든게 바로? 비트 연산자이다!
위키에 나와있는 정의로는 ‘비트 단위로 논리 연산을 할때 사용하는 연산자’ 라고 되어있다.
그 중 오늘 우리가 사용할 부분만 간단하게 설명 하겠다.
입력 된 두 비트가 모두 1일때만 1을 반환한다.
C언어에서 비트연산자 '&'로 사용한다. 
입력 된 두 비트중 하나라도 1이라면 1을 반환한다.
C언어에서 비트연산자 '|'로 사용한다.
입력 된 두 비트가 서로 다를 때 1을 반환한다.
C언어에서 비트연산자 '^'로 사용한다.
컴퓨터는 사칙연산을 덧셈으로 한다. 빼기는 2의 보수(궁금하다면 직접 찾아보셈)를 사용해 더하는 방식이고, 곱셈은 덧셈을 반복하면 되고, 나누기는 조금 복잡하니까 넘어가고,
어찌되었든 덧셈이 중요한것 같으므로 덧셈에 대해 알아보자.
컴퓨터는 이진수를 사용하기 때문에 합이 2이상이 된다면 자리올림을 해주면 된다.
Sum = '합', Carry = '자리올림'
0 + 0 = 0(Sum) , 0(Carry)
0 + 1 = 1(Sum) , 0(Carry)
1 + 0 = 1(Sum) , 0(Carry)
1 + 1 = 0(Sum) , 1(Carry)
우리가 평상시 사용하는 10진수를 예로 들자면 6 + 5 = 11 두 값의 합이 10을 넘어가니 자리를 올려서 표시한다.
근데, 저 식 어디선가 본 적 있는거 같지 않나?
그렇다! 합은 XOR연산이고, 자리올림은 AND연산인거다!
논리회로로 표현한다면 아래와 같이 표현되고
이것을 반가산기(Half Adder)라 부른다.

그리고 반가산기는 이전자리 덧셈에서 올라오는 자리올림을 고려하지 않는다.
두 개의 비트와 이전자리 덧셈에서 올라오는 자리올림을 더해 계산하는 회로는 아래의 그림처럼 표현되고,
이것을 전가산기(Full Adder)라 부른다.

계산되는 순서를 살펴보자, 우리가 10 + 2를 한다고 하고 10을 2진수로 바꿔 표현하여 1010(2)로 변환하고, 2을 2진수로 바꿔 표현하여 0010(2)로 변환한다.
그 중 1010(2)의 최하위 비트와 0010(2)의 최하위 비트를 반가산기에 집어 넣는다.
거기서 나오는 Sum은 결과값의 최하위 비트에 들어간다.
Carry은 전가산기로 보내서 다음 값을 계산하고 Sum을 결과값의 다음 하위 비트에 넣고 Carry를 전가산기로 보내는걸 반복한다.
아래의 그림을 살펴보며 천천히 이해해보자!

파란박스의 왼쪽이 Carry,오른쪽이 Sum이다.
참고한 글들
https://borntodevelop.tistory.com/entry/IT-2%EC%A7%84%EC%88%98-4%EC%B9%99%EC%97%B0%EC%82%B0%EB%8D%94%ED%95%98%EA%B8%B0%EB%B9%BC%EA%B8%B0%EA%B3%B1%ED%95%98%EA%B8%B0%EB%82%98%EB%88%84%EA%B8%B0-%EC%9B%90%EB%A6%AC-Bit-Binary
https://bttrthn-ystrdy.tistory.com/33
https://namu.wiki/w/%EB%85%BC%EB%A6%AC%20%EC%97%B0%EC%82%B0#s-2.2
https://blog.naver.com/highkrs/220646655792
https://www.youtube.com/watch?v=5vnC07bQ0uo&t=568s
비트연산자와 논리연산자는 다르다. 가끔 '&'이거랑 '&&'를 똑같다고 생각하는 친구들이 있던데, '&'를 사용하면 비트를 반환하고, '&&'를 사용하면 참 또는 거짓을 반환한다.
이 글은 내가 인터넷을 통해 조사하고 이해한 후 작성한 것이므로, 잘못된 부분이 있을 수 있다. 댓글로 잘못된 부분을 지적해주면 수정하도록 하겠다.
최대한 어려운 부분 다빼고 설명해서 이해가 안될수도 있다. 보충할 점이나 궁금한 점이 있다면 댓글로 알려준다면 더 자세히 설명해 보겠다.. 2의 보수에 관한 점은 시간이 된다면 따로 다뤄보도록 하겠다. 그리고 진짜 열심히 적었다,, 특히 그림 그리는거 제일 오래걸림,,
와 이걸 학교오기 전부터 하네 대단 👍👍