-> 모든 언어(apple)는 기호(a, p, p, l , e)의 집합으로 인코딩
->의사소통하는 모든 이들이 같은 문맥을 공유(동일한 언어라 해도 상황에 따라 다르게 해석되는 경우가 있음)
*** 컴퓨터 언어도 위같은 문제가 있음
-> 문자 언어의 틀을 이루는 세가지 요소
1. 기호가 들어갈 상자
2. 상자에 들어갈 기호
3. 상자의 순서
-> 자연어(인간의 언어)에서는 상자를 문자라 부르고 컴퓨터에서는 비트라 부른다
-> 비트는 2진법을 사용한다는 바이너리(binary), 숫자를 뜻하는 디지트(digit) 합쳐짐
-> 비트는 2진법을 사용함
-> 0혹은 1 둘 중 하나가 비트에 담김
-> 비트의 사용법 중 하나
-> 자연어에서의 예 / 아니오와 같이 true/ false로 다른 비트들이 표현하는 내용을 가지고 새로운 비트를 만들어내는 것을 논리연산이라 한다
-> 앞서 비트에 대해 사용할 수 있는 연산 규칙의 집합
*** 불리언 연산자
1. NOT: 논리적 반대를 의미, 거짓 비트에 NOT을 하면 참, 참 비트에 NOT을 하면 거짓
2. AND: 모든 비트가 참이면 AND 연산의 결과가 참, 나머진 거짓
3. OR: 하나의 비트라도 참이라면 모두 참, 나머진 거짓
4. XOR: 두개의 비트가 전부 다른 값인 경우에만 참, 나머진 거짓
-> 불리언 대수에 적용할 수 있는 법칙
-> 이 법칙은 a AND B 라는 연산이 NOT(NOT a OR NOT b)와 같다고 말한다
-> 즉, NOT을 충분히 사용한다면 AND연산을 OR연산으로 대신할 수 있다는 애기
-> 컴퓨터에선 항상 정의롭게 결과가 나오지않기에 이런 결과는 되게 유용
예를 들어서 춥다, 비가 온다가 아니라 NOT춥다, NOT비가 온다가 될 수 있는것이다
-> 일반적으로 10진수(decimal number)는 10가지 기호(0~9)인 숫자를 상자에 담을 수 있다
예를 들어 왼쪽부터 상자에 100의 자리, 10의 자리, 1의 자리같은 이름이 붙여지고 값이 넣어짐
*** 즉, 상자에 든 내용물(0~9)과 상자의 값을 곱한것을 전부 더한 값
-> 비트도 마찬가지로 각 상자에 넣을 수 있는 기호는 0과 1
예를 들어 5028을 표현할때는 10진수로는 네자릿구, 2진수로는 13비트수(0승부터 12승)로 표현가능하다
-> 2진수에서 비트의 개수가 표현할 수 있는 값의 범위를 결정하게된다
예를 들어서 2비트만 사용하면 0~3사이에 속하는 네가지 수를 표현가능
-> 이때 2진수에서 가장 오른쪽의 비트를 "가장 작은 유효 비트"(LSB), 가장 왼쪽의 비트를 "가장 큰 유효 비트"(MSB)라 한다
-> 10진수 덧셈에서 오른쪽에서 왼쪽으로 각 자리의 숫자를 더하는데 결과가 9보다 크면 1을 올리는것처럼 2진수에서도 LSB(오른쪽)에서 MSB(왼쪽)로 더하며 결과값이 1보다 크면 1을 다음 자리로 올린다
-> 두 비트를 서로 더한 결과는 두 비트를 XOR한 값과 같고 올림은 두 비트를 AND한 값과 같음
-> 만약에 덧셈결과가 우리가 사용할 비트의 개수로 표현할 수 있는 범위를 벗어나면 어떻게 될까 ?? 이를 오버플로가 발생한다
*** 오버플로란 ?? MSB에서 올림이 발생했다는 뜻
예를 들어서 4비트 덧셈에서 1001(9)와 1000(8)이 있다면 결과는 10001(17)이다, 하지만 MSB왼쪽에 사용할 수 있는 비트가 없기때문에 0001(1)이 되는것이다