본문 바로가기

자동제어(PLC,PC,로봇) & 전장설계 & CNC/PC 제어

PC제어프로그램 3일차 - 진수의 연산, 뺄셈 (20.05.07)

반응형

진수의 연산

10진수의 덧셈

  10진수는 각 자리의 최대수는 9

   두 수를 합하여 10이 되면 바로 윗자리에 1을 더하고, 그자리는 0이 된다.

 

2진수의 덧셈

2진수는 각 자리의 최대수가 1

연산 결과가 2가 되면 바로 윗자리에 1을 더해주는 자리올림이 생기고, 그자리는 0이 된다.

 

 

진수의 연산

7(10)

+8(10)

15(10)

1(2)

+1(2)

10(2)

1(2)

+1(2)

+1(2)

11(2)

 

10진수 6+5를 2진수로 변환시켜 계산해보자.

6(10)

+5(10)
?

->

0110(2)

+0101(2)

1011(2)

검산: 2진수 1011는 10진수로 11이다.

 


진수의 뺄셈

초기의 컴퓨터는 직접 뺄셈을 수행

최근 대부분의 컴퓨터는 보수를 사용하여 뺄셈을 덧셈으로 바꾸어 처리한다.

    (뺄셈을 보수에 의한 덧셈으로 한다)

 


보 수

디지털 컴퓨터에서 음수를 표현하기 위한 수의 표현방법

뺄셈을 용이하게 하기 위해 사용

2진법에는 1의 보수와 2의 보수가 있다.

=> 보수를 사용하는 목적은 뺄셈을 하기 위한 방법인데

=> 다시말해서 뺄셈을 덧셈으로 용이하게 하는 방법

 


1의 보수 / 2의 보수

1의 보수

  각 자리의 0을 1로, 1을 0으로 변환

  110100(2)의 1의 보수는 -> 001011(2) -> 1011(2)

 

2의 보수

  2의 보수는 1의 보수에 1을 더한다.

  1011(2) + 1(2) = 1100(2)

  110100(2)의 2의 보수는 -> 001100(2) -> 1100(2)

 

ex) 10101(2) -> 1의 보수는 01010 -> 2의 보수는 01011(2) -> 따라서 1011(2)

 


보수에 의한 뺄셈

보수에 의한 뺄셈 (1의 보수에 의한 방법)

  ◆ 피감수에 감수의 1의 보수를 취한 후 더한다.

  ◆ 맨 윗자리의 자리올림이 있으면 최하위 비트 + 1

  ◆ 자리올림수가 없으면 얻은 결과에 다시 1의 보수를 취하고 (-)부호를 붙인다.

  1101(2) - 0101(2)과 0100(2) - 1101(2)의 계산

 

1101(2) - 0101(2)

13 - 5 = 8

 

0101-1101

5 - 13 = -8

 

 

1101(2)

+1010(2) - 감수의 1의 보수

10111(2)

+ 1(2)

1000(2) -> 10진수 8이 된다.

 

0101-1101

 


 

2의 보수에 의한 뺄셈

  ◆ 피감수에 감수의 2의 보수를 취한 후 더한다.

  ◆ 맨 윗자리의 자리올림이 있으면 무시하고

  ◆ 자리올림수가 없으면 얻은 결과에 다시 2의 보수를 취하고 그 앞에 (-)부호를 붙인다.

  ◆ 1011(2) - 0101(2)와 0101(2) - 1011(2)를 2의 보수를 이용하여 계산해 보자.

 

 

컴퓨터가 내부에서 뺄셈을 계산하는 방식이다.

1101(2) - 0101(2) 0101(2) - 1101(2)
13(10) - 5(10) = 8(10) 5(10) - 13(10) = -8(10)

 

1101(2) 피감수

1010(2) 감수 -> 1의 보수

+ 1(2) 2의 보수

1011(2) 감수

11000(2)

 

 

 

곱셈과 나눗셈

곱셈은 반복적인 덧셈의 원리를 이용한다.

100 x 3 = ?

100+100+100 =...

 

3 x 100 = ?

3 + 3 + 3 ... =

 

나눗셈은 반복적인 뺄셈의 원리를 이용한다.

 


 

문자 자료의 표현

문자코드는 6~8비트로 구성된다.

8비트 경우 : OOOOOOOO

왼쪽은 ZONE BIT

오른쪽은 DIGIT BIT (항상4BIT)

 


 

BCD코드 (Binary Coded Decimal) 8421코드

BCD코드는 숫자를 표현하기 위해 사용하던 4비트 코드를 확장한 코드

2개의 존비트, 4개의 디짓비트로 구성

6개의 비트로 64가지(2^6) 문자를 표현

 

1 BIT 2가지 표현 0,1
2 BIT 4가지 표현 00, 01, 10, 11
3 BIT 8가지 표현 000, 001, ~~~, 111
... ... ...
n BIT 2^n가지 표현 0 ~~~ 2^n - 1

문제 유형은

n bit일때 몇 가지의 신호가 나오냐? 2^n

n bit일때 가장 큰 수는? 2^n - 1

 


 

10진수 2364를 BCD코드로 나타내면

10진수 1자리를 2진수 4자리로 나타낸다.

0010 0011 0110 0100 (BCD)

 

16진수 1F를 BCD코드로 나타내면

1x16^1 + 15 x 16^0 = 16+15 = 31 (10)

16진수를 10진수로 고친다. 바로 고쳐본다. 2진수로도 변경할 수 있다.

0011 0001 (BCD)

 

EBCDIC 코드

BCD코드(6비트)를 8비트로 확장한 코드

...

 


ASCII 코드

ASCII 코드

미국표준협회가 제정한 데이터 처리 및 통신 시스템 상호간의 정보 교환용 표준코드

1개의 패리티 체크 비트와 7개의 데이터 비트(3개의 존비트와 4개의 디짓비트)로 구성

7개의 비트로 128가지(2^7) 문자를 표현

 

패리티 비트

CPU에서 데이터를 송신한다 (7비트)

101 0110 (원본데이터)

----->

101 0010 (이 데이터로 잘못된 연산을 하고 액추에이터를 잘 못 구동하게 된다)

 

이러한 에러 데이터를 처리해보자. 에러를 확인하는 방법을 고안했다.

보낼때 1의 갯수를 세어서 홀수이면 체크비트에 1

짝수이면 체크비트에 0을 보낸다.

 

0 101 0110 (원본데이터)

----->

0 101 0010 (1의 숫자는 홀수이므로 에러 발생)

 

패리티 비트는 오류를 검출하기만 하고 수정은 못한다.

패리티 비트 목적은 '에러 검출'

 

 

만약 2개가 동시에 틀리면 에러검출은?

2개가 동시에 틀리는 경우는 거의 없다.