환급미션 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
'패스트캠퍼스' 카테고리의 다른 글
[패스트캠퍼스 수강 후기] 올인원 패키지 : 컴퓨터 공학 전공 필수👉C언어인강 100% 환급 챌린지 10회차 미션 (0) | 2020.10.28 |
---|---|
[패스트캠퍼스 수강 후기] 올인원 패키지 : 컴퓨터 공학 전공 필수👉C언어인강 100% 환급 챌린지 9회차 미션 (0) | 2020.10.27 |
[패스트캠퍼스 수강 후기] 올인원 패키지 : 컴퓨터 공학 전공 필수👉C언어인강 100% 환급 챌린지 7회차 미션 (0) | 2020.10.25 |
[패스트캠퍼스 수강 후기] 올인원 패키지 : 컴퓨터 공학 전공 필수👉C언어인강 100% 환급 챌린지 6회차 미션 (0) | 2020.10.24 |
[패스트캠퍼스 수강 후기] 올인원 패키지 : 컴퓨터 공학 전공 필수👉C언어인강 100% 환급 챌린지 5회차 미션 (0) | 2020.10.23 |