제주 탈출 일지

패스트캠퍼스 챌린지 2일차 본문

패스트캠퍼스 챌린지!

패스트캠퍼스 챌린지 2일차

귀건 2021. 9. 7. 23:22
728x90
반응형

2일차 시작.

04. 컴퓨터에서 자료 표현하기

 

악필..

 

컴퓨터 내부에서 자료가 어떻게 저장이 되는가에 대한 부분, 한번 다시 정리할 수 있었다.

사실 2진수, 8진수, 16진수에 대한 내용은 그렇구나 하고 넘어갔지만, MSB관련 내용이 나와서, 다시 한번 정리한다.

예전 디지털 설계 관련 멘토 당시 MSB가 1이면 음수인가? 에 대한 질문을 한 후배가 했던것이 기억에 남는다ㅋㅋ

(그 때 얼버무렸던거 같음. 정확히 몰라서)

 

자바 실습 화면.

이제 오류는 없다.

 

음수 표현(음수 만들기)

이제 컴퓨터에서 음수를 표현하려면 보수를 이용하는데, (보수란 A + B = 보수 형태로 나오는 것이라고 알고있음.)

이제 2의 보수를 취해주게 된다.

정수 5를 2진수 형태로 바꿔주면 00000101 이 되는데,

1. 보수를 취한다. -> 11111010 ( 이러면 두개 더한 값이 1111111 -> 요렇게 변함)

2. 2의 보수를 만들어야 하므로 LSB( 가장 오른쪽 비트) 에 1을 더함 -> 11111011

3. 11111011은 16진수로 FB 이다.

 

이제 그럼 컴퓨터에서 확인해보자..

본인 컴퓨터에 C가 없어서 온라인 컴파일러를 이용했는데, FF(11111111)와 -5를 비트곱 할 것이다.

그러면 -5의 2자리 16진수 형태를 파악할 수 있다. 아까 우리가 구했던 값은 FB이므로 여기서도 FB가 나오면 제대로 확인했다고 할 수 있다.

 

확-인했다.

 

컴퓨터 자료형에 대한 음수 범위 확인

양수를 음수로 만드는 방법은 알았으니, 이제 자료형에 범위를 통해 음수가 어떻게 생겨먹었는지 확인해보자

C의 int형는 4바이트, 즉 32비트이다.

이 int형의 범위는 2^31 -1 ~ 0 ~ - 2^31 일 것이다. ( -2,147,483,648 ~ 2,147,483,647 )

(2^10)^3 * 2^2  으로 생겨먹었으니 1024 * 1024 * 1024 * 4 이러면 2^32이다. 계산기로 두들겨 보면 다음과 같다.

4,294,967,296

이게 2^32이고, 32비트로 표현할 수 있는 총 범위 인 것이다. 근데 32비트로 양수 0 음수를 모두 표현해야한다.

음수 반 양수 반으로 나누면 0을 표현 못한다. (2^31 + 2^31 = 2^32) 그러니까 양수를 표현할 한자리를 0에게 할애하는 것이다. 그래서 2^31 -1 ~ 0 ~ -2^31 로 표현하는 것이다. 

딴 길로 빠졌는데 결국, int형으로 표현할 수 있는 양수의 최댓값은 2^31-1 이라는 것! -> 2,147,483,647 이 값을 컴퓨터에서 찍어보자. 위와 동일하게 2,147,483,647과 0xFFFFFFFF를 곱해보면 어떻게 생겼는지 확인할 수 있을것이다. 

 

7FFFFFFF가 나온다. (0111 1111 1111 ....) 와 같은 형태로 생겨먹었다. MSB를 보면 0이다. 양수라는 뜻.

그러면 2,147,483,647 + 1 한 값은? 아마 오버플로우가 나서 음수가 될것이라고 짐작할 수 있다.

역시 오버플로우가 나서 80000000이 되었다. (1000 0000 ....)

-2,147,483,647는 어떻게 생겼을까? 80000000 -1 은 7FFFFFFF인데 이것은 양수의 최댓값과 동일하다. 찍어보면 알수 있을것이다.

80000001이다. 음수가 하나 줄었을때 이진수 표현은 1이 더해졌다. ㅋㅋ, 마지막으로 음수의 최솟값인 -1을 찍어보자.

FFFFFFFF 가 나온다.

 

정리하면 음수 범위를 16진수로 적어보면 80000000(-2,147,483,648) ~ FFFFFFFF(-1) 인데 모두 부호비트가 1이다.

따라서, 부호비트가 1이면 int 범위에서는 음수이다를 확인해볼 수 있다.

cf. 부호가 없는 unsigned 자료형에서는 음수가 없기 때문에 MSB는 그저 최상위 비트이다.

 

정리 끝.

 

05. 변수는 변하는 수입니다.

대입연산 할때

lvalue, rvalue

age = 10000 이라고 하면, age가 10000이라는 것이 아닌 lvalue에 rvalue를 대입한다는 의미이다. 같다 아니다!

 

변수 명 설정할 때,

변수는 예약어는 사용할 수 없다.

변수는 숫자로 시작할 수 없다.

이 변수가 어떤 용도로 사용하는 지 확인할 수 있는 변수명으로 명명해야 한다.

int ns;

int numberOfStudent -> 가독성이 ns보다 더 좋다.

변수명이 길어도 가독성이 좋게 쓰자.

카멜 노테이션(낙타 등 같이, 소문자로 시작하고 단어가 바뀔 때마다 대문자로 시작)

cf. numberOfStudent

 

오늘은 여기까지만..

 

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

728x90
반응형
Comments