g++ test.c -o main
다시 시작해보자 C
<aside> 💡 6782 = 4×16^3 + 1×16^2 + 8×16^1 + 14×16^0 = 0x418E
앞에 붙은 0x 는 이 수가 16 진수로 나타나있다는 것을 알려줍니다
</aside>
<aside> 💡 8 비트로 나타낼 수 있는 수, 다시말해 8 자리 이진수로 나타낼 수 있는 최대의 수는 아래와 같이00000000_2 ~ 11111111_2 = 0 ~ 255 = 0 ~ 0xFF 0 부터 255 로 총 256 개의 수를 나타내게 됩니다 $(2^8 = 256)$
printf('%x', a) 하면 a를 16진수로 나타냄, %d는 10진수
printf("b : %6.3f \\n", b); 전체 자리수를 6으로 맞추고 소수점 이하 3째 자리까지만 표시
</aside>

Difference between int64_t and long (long int)? The former is a signed integer type with exactly 64 bits. The latter is a signed integer type with at least 32 bits.
2의 보수 표현법 : 예를 들어서 -7 을 나타내기 위해서는, 7 의 이진수 표현인 0111 의 비트를 모두 반전시키면 1000 이 되는데 여기다 1 을 더해서 1001 로 표현하면 됩니다. 반대로 -7 에서 7 로 가고 싶다면 1001 의 부호를 모두 반전 시킨뒤 (0110) 다시 1 을 더하면 양수인 7 (0111) 이 나오게 됩니다.
고정 소수점 vs 부동 소수점
<aside> 💡 워드(Word) 라고 부르는 단위가 있습니다. 컴퓨터에서 연산을 담당하는 CPU 에는 레지스터(register) 라는 작은 메모리 공간
이러한 레지스터의 크기는 컴퓨터 상에서 연산이 실행되는 최소 단위라고 볼 수 있고, 이 크기를 워드 라고 부릅니다 64 비트 컴퓨터의 경우 1 워드가 64bit, 즉 8byte가 됩니다.
</aside>
<aside>
💡 32bit 컴퓨터의 레지스터의 크기는 32bit. (핸드폰 번호 자리 수)
나올 수 있는 번호 개수는 2^32개
주소의 기본 단위는 1byte (핸드폰 번호 1개 size)
그래서 1byte * 2^32 = 4,294,967,296 = 4GB
즉 4GB의 주소를 레지스터가 표현할 수 있다는 뜻임 (주소록 총 4GB)
</aside>
<aside> 💡 switch 문과 if else문은 사뭇 다릅니다. switch 의 경우 내부적으로 jump table 이라는 것을 생성합니다. 이 때, jump table 의 크기는 case 의 값들에 따라 달라지는데, 예를 들어서 어떤 switch 문의 경우 case 1: ~ case 10: 까지 있었다고 합시다. 그렇다면 jump table 에는 값들이 0 부터 9 까지 들어가게 됩니다.
</aside>
<aside> 💡 global variable과 비슷, memory allocation이 일어난 후 프로그램이 종료될 때까지 소멸되지 않으면서 재초기화도 일어나지 않음
global variable과는 다르게 선언된 파일 내부에서만 접근 가능
선언만 해두면 내부 값이 0으로 초기화
함수 앞에 붙는다면, 정적 함수로 만들어 준거임. 다른 파일에서 같은 함수명끼리의 충돌을 막기 위해, static을 붙이면 그 파일 안에서만 사용가능하게 만든거임.
</aside>