패스트캠퍼스

[패스트캠퍼스 수강 후기] 올인원 패키지 : 컴퓨터 공학 전공 필수👉C언어인강 100% 환급 챌린지 8회차 미션

돌맹이시터 2020. 10. 26. 17:36

 

 

환급미션 8일째

 

 

 

 

 

컴퓨터 구조 - 데이터의 표현 - 논리회로와 데이터 표현 -1

컴퓨터 구조 - 데이터의 표현 - 논리회로와 데이터 표현 -2

 

 

 

 

지난 강의에서 언급했던 보수의 활용에 대한 예시가 나왔다.

 

아래는 표현 가능한 비트 수가 4bit라고 가정했을 때, 표현 가능한 경우의 수를 나타낸다.

 

 

표의 내용보다는,

1의보수, 2의보수를 취했을 때 일어나는 상황을 이해하면 된다.

자리올림이 발생했을 때,

그리고 2의보수를 취할 때 음수 표현이 하나 더 많은 경우

왜 그런지? 를 생각해볼 수 있다.

 

 

 

 

- 다시 한 번 보수 정리를 해보자!

 

 

* 보수 : 보충을 해주는 수. (1에 대한 10의 보수는 9, 4에 대한 15의 보수는 11 등)

 

 

컴퓨터에서는 이진수를 사용하기 때문에,

보수를 이용해서 음의 정수를 표현한다.

 

자릿수가 8개 (8비트) 인 경우,

정수 -6을 위의 표에서와 같이 1의보수, 2의보수 방식으로 표현할 수 있다.

 

 

 

 

* 1의 보수

 

:

1. 어떤 수를 커다란 2의 거듭제곱수-1에서 빼서 얻은 이진수,

2. 비트를 반전시켜서 얻을 수 있다.

 

2의 방법이 더 사용하기 편리하다.

 

 

 

 

 

 

* 2의 보수

:

1. 어떤 수를 커다란 2의 제곱수에서 빼서 얻은 이진수,

2. 주어진 이진수보다 한 자리 높고 가장 높은 자리가 1이며 나머지가 0인 수에서 주어진 수를 빼서 얻은 수가 2의 보수

3. 주어진 이진수의 모든 자리의 숫자를 반전(0을 1로, 1을 0으로)시킨 뒤 여기에 1을 더하면 2의 보수를 얻을 수 있다

 

 

3의 방법이 가장 사용하기 편리하다.

 

 

 

 

그냥 뒤집어서 1을 더하자!

 

 

 

 

뭔가 어제보다 더 본격적으로 들여다보게 된 듯...

 

 

 

 

 

- 논리 게이트 ( logical gate )

: 논리 연산을 수행하는 전자소자, 주어진 입력 변수 값에 대해 정해진 논리 함수를 수행하여 결과값을 출력하는 하드웨어

 

 

 

 

 

- 논리 연산의 기본 표현

 

논리곱 (AND)

논리합 (OR)

논리부정 (NOT)

배타적 논리합 (exclusive OR == XOR)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

배타적 논리합은 간단히 말해,

 

A,B의 값이 같을 때 0

A,B의 값이 다를 때 1

 

 

 

 

 

 

- 실무 적용 사례

 

 

 

 

C는 캐리비트,

진리 표에서 확인했을 때 a,b,C 관계에서 논리합이 적용되는 것을 알 수 있고

S는 a,b,S 관계에서 배타적 논리합이 적용되는 것을 알 수 있다.

따라서 3step 처럼 회로를 구성할 수 있다.

 

 

 

 

 

 

 

소프트웨어 베이직 - c언어의 기초 - 10. 문자

 

 

 

 

 

- 문자

 

 

C언어의 문자는 내부적으로 아스키 구조를 따른다.

C언어에서 문자 입출력 내부에는 버퍼(buffer)가 존재한다.

 

 

 

* 아스키 코드

 

c 프로그램의 문자는 아스키 모드(Ascii code)를 따른다.

0~127중의 1바이트로 구성, 주요 문자를 출력하도록 해준다

--------

0~9 : 48~57

A~Z : 65~

a~z : 97~

---------

( 시작되는 숫자는 기억해 두는 것이 유용하다고 한다 )

 

캐릭터형 자체에 숫자를 넣어 처리가 가능하며, 형식 지정자로 %c를 사용

ex)

char a= 65;

printf("%c",a);

------------------ 출력결과는 아스키 코드의 65에 해당하는 'A' 이다.

 

 

 

 

* 문자 입출력 함수

 

getchar()을 이용하면 하나의 문자를 입력받을 수 있다.

 

ex)

 

char a = getchar();

printf("%c\n",a);

----------------------

출력 결과는 사용자에게 입력받은 문자가 된다.

 

 

 

 

* 버퍼

 

: 임시적으로 특정한 데이터를 저장하기 위한 목적으로 사용,

문자열을 처리할 때 버퍼의 개념이 많이 사용되며, c프로그램은 기본적으로 자동적으로 버퍼를 이용해 입출력 처리

 

 

ex) 입력 버퍼로 인해 발생하는 오류

----------------

int a;

char c;

scanf("%d", &a);

printf("%d\n", a);

 

scanf("%c",&c);

printf("%c\n",c);

------------------

위와 같이 작성하면, 입력받은 a 값만 출력되고, 종료된다.

이유는 a값을 출력했던 printf 구문에 있는 \n (엔터, 줄바꿈)을 c로 입력받아 버리기 때문

 

 

ex) 위의 예제의 해결법

--------------------

int a;

char c;

scanf("%d", &a);

printf("%d\n", a);

 

int temp; //아스키코드는 숫자로 표현, 모든 문자는 숫자로 관리가 되기 때문에 int 자료형 사용해도 무방

while ( ( temp=getchar() ) != EOF && temp != '\n' )

// 한 자씩 받아서 파일의 끝(End Of File, EOF)이거나 개행 문자('\n')를 만나면

{ } 

// 입력을 멈춘다. 

// 따라서, 입력 버퍼를 비우게 된다.

 

scanf("%c",&c);

printf("%c\n",c);

----------------------

 

 

 

 

 

올인원 패키지 : 컴퓨터 공학 전공 필수👉https://bit.ly/3i4sCVE