2010년 10월 31일 일요일

Assembly language로 프로그래밍 하기!!

세가지 수를 입력 받아서 큰수부터 나열하는 프로그램을 짜라는 과제다.

먼저 프로그래밍을 어떤식으로 할 건지에 대해서 방향을 잡기 위해

먼저 C로 코드를 작성하자.

#include <stdio.h>
int main(void)
{
 int num1, num2, num3;
 scanf("%d %d %d" , &num1, &num2, &num3);
 if (num1 < num2)
  if (num2 < num3)
   printf(" num1 num2 num3 ");
  else
   if (num1 < num3)
    printf(" num1 num3 num2 ");
   else
    printf(" num3 num1 num2 ");
 else
  if(num2>num3)
   printf(" num3 num2 num1 ");
  else
   if(num1 < num3)
    printf(" num2 num1 num3 ");
   else
    printf(" num2 num3 num1 ");
 return 0;
}
이런식의 코딩이 가능하다

그러면 이제 이를 활용해서 assembly langauge로 코드를 짜보자

BR      main
num1:    .BLOCK  2                                       
num2:    .BLOCK  2                                       
num3:    .BLOCK  2                                       
main:    DECI    num1,d                                  
            DECI    num2,d
            DECI    num3,d
         BR      num12
num12: LDA    num1,d
         SUBA    num2,d
         BRLT    num12a
         BR      num12b
num12a: LDA    num2,d
         SUBA    num3,d
         BRLT    num123
         BR      num23

num23: LDA    num1,d
         SUBA    num3,d
         BRLT    num132
         BR      num312
num12b: LDA    num3,d
         SUBA    num2,d
         BRLT    num321
         BR      num13
num13: LDA    num1,d
         SUBA    num3,d
         BRLT    num213
         BR      num231
num123: DECO num1,d
              DECO num2,d
              DECO num3,d
              BR finish

num132: DECO num1,d
              DECO num3,d
              DECO num2,d
              BR finish
num213:DECO num2,d
              DECO num1,d
              DECO num3,d
              BR finish
num231: DECO num2,d
              DECO num3,d
              DECO num1,d
              BR finish
num312: DECO num3,d
              DECO num1,d
              DECO num2,d
              BR finish
num321: DECO num3,d
              DECO num2,d
              DECO num1,d
              BR finish
finish:  STOP
         .END


명령어는 그렇게 많이 필요한 건 아니었지만, 그래도 오래걸렸다 ..휴

그래도 역시 C로 코딩 하는게 편하고 좋은듯 .... (익숙해서그런진몰라도 ㅋㅋ)

2010년 10월 27일 수요일

효율성이 보장되면서 가격이 저렴한 컴퓨터를 만들어보자!!

컴퓨터를 사용하는 데에 있어 중요하게 여기는 건 인터넷 사용에 무리가 없을정도로 돌아가야 하고, 고샤양의 게임은 아니더라도 기본적인 게임들은 돌아가야 합니다.
문서작업과 여러 부가 기능들은 인터넷이 잘 돌아가고 중간사양의 게임이 잘 돌아간다면 무리가 없을 것으로 보입니다.
저는 게임을 하더라도 그렇게 고사양의 게임은 안하는 편이기 때문에 가격의 효율을 따져 컴퓨터 부품들을 골라보았습니다.

CPU : AMD 페넘II-X4 965 Black Edition (데네브)
게이밍, 편집과 HD 컨텐트까지 할 수 있는 강력한 기능에, 적절한 가격으로 사람들이 많이 선호하는 제품입니다.
3.4GHz의 동작 속도와 4개의 코어 수, 배수 제한 해제의 특징을 가지고 있습니다.
가격대비 성능이 좋은 것 같아 골랐습니다.

메인 보드 : GIGABYTE GA-H55M-USB3
그리 비싸지 않은 제품인데 불구하고 소비자 선호도 1위를 차지한 제품입니다.
이유는 제품의 안정성과 조립시 편의성이 보장되고, 좋은 성능과 부가기능 덕분입니다.
이 제품은 가격비 성능비가 워낙 좋기 때문에 피시방에서도 주로 쓰이는 제품으로, 신뢰가 가서 선택했습니다.

그래픽 카드 : XFX 라데온 HD 5670 D5 512MB Rextech 
보급형을 뛰어넘은 3D 성능, 동영상 가속, 저발열, 저전력 그리고  DirectX 11 과 ATI Eyefinity 까지 소비자의 마음을
충족시켜 줄 수 있는 모델입니다.
그리고 중요한 것은 가격이 다른 제품에 비해 상당히 저렴한 편이기 때문에 선택했습니다.

케이스 : BESTECH 세븐
무난한 모양에 충분한 공간이 확보되어 있고, 가격이 상당히 저렴합니다.
물론 케이스가 내부 기기들은 보호하고, 이를 잘 조립해야 컴퓨터의 성능이 최고로 발휘되지만,
케이스는 디자인을 제외하고, 낮은 가격에 치중하도록 노력했습니다.

RAM : 삼성전자 DDR3 2G PC3-10600
2GB의 용량을 가지고 있는 제품입니다. RAM의 가격이 계속 내려가고 있는데,
그 중 무난한 제품입니다. 그리 비싸지 않으면서 호환성이 좋고, 안정적인 메모리 이기 때문에 선택했습니다.

HDD/SDD : Seagate 1TB Barracuda 7200.12 ST31000528AS (SATA2/7200/32M)
1TB의 대용량을 지원하고, 뛰어난 성능을 자랑하는 제품입니다. 전송률은 최대 3.0GB/s 입니다.
또한 작동환경이 변하면 알아서 헤드와 원판의 거리를 조절하는 안정성을 높인것이 눈에 띄는 제품 입니다.
또한 가격도 적당하고, 친환경 하드디스크로서 소비전력, 소음, 용량 모두 줄일 수 있는 효율적인 제품이라 선택했습니다.

ODD : LG전자 Super-Multi GH-22LS50
ODD로 유명한 회사인 LG전자 제품을 택했는데, 하나의 드라이브로 모든 DVD 미디어를 기록할 수 있는 장점이 있는 제품입니다.
또한 디스크 손상이 있어도 부드럽게 재생할 수 있는 기능을 탑재하였기 때문에 안정성을 높일 수 있습니다.
가격도 그리 비싼 편이 아니기 때문에 무난한 제품입니다.
하지만 단점이 있다면, 작동시 발생하는 소음이 있을 수 있습니다.

파워 : Heroichi HEC-Rapter 500WP
에너지 절감, 시스템 고장의 따른 이상과 내부 이상으로부터 시스템을 보호 할 수 있고, 확장성,
안정적인 전원 공급, 고효율 설계를 통한 에너지 절감 등의 장점이 있는 제품 입니다.
가격도 저렴하고, 여러가지 장점이 많은 제품으로 보여 선택했습니다.

이렇듯 효율성 높고, 가격이 저렴한 제품 위주로 골라 보았지만, 아직 이를 직접 사서 조립해 본것이 아니기 때문에
각 부품간 호환이 될지도 알지 못하고, 각 제품이 조화롭게 동작해서 앞에 제시했던 조건들을 만족할 지는 모르겠지만,
이렇게 한 번 부품을 골라 봄으로서 향후에 컴퓨터 부품을 조립할 기회가 생겼을 때 훨씬 수월하게 일을 진행 할 수 있을 것 같습니다.
의미있었던 과제였던 것 같습니다.

2010년 10월 9일 토요일

Boolean algebra (불 대수, 부울 대수)

1. Boolean algebra는?

영국의 수학자 조지 불(George Boole)이 18세기 중엽에 창안한 대수의 한 형식. 컴퓨터 동작의 기초가 된다. 불 대수는 x나 y의 수치적 상관관계를 다루지 않고 논리적 상관관계를 다루는데, 이것은 연산의 종류와 변수들이 참인가 거짓인가에 따라서 논리적 명제들이 참 아니면 거짓이라는 논리에 바탕을 두고 있다. 불 대수의 2가지 중요한 측면은 ㉠변수들을 참 또는 거짓의 단지 두 값 중의 하나로 한정할 수 있고, ㉡이들 변수 간의 상관관계를 논리곱(AND), 논리합(OR), 부정(NOT) 등의 연산자로 논리적으로 나타낼 수 있다는 것이다. 불 대수의 이 2가지 측면은 디지털 계산에 사용되는 전자 회로에 응용될 수 있으므로 정보를 처리하고 문제를 해결하는 데 사용된다. 예를 들면, 참과 거짓은 전압의 유무에 의해 쉽게 컴퓨터 고유 언어의 2진수 1(참)과 0(거짓)으로 나타낼 수 있다. 또한 불 논리는 ‘만일 A가 참이고 B가 참이면 결과는 언제나 참이다.’를 의미하는 ‘A AND B=true’와 같은 명제에 바탕을 두고 있다. 이러한 논리는 컴퓨터 회로에 논리 게이트 로 설계해 놓을 수 있다. 논리 게이트는 비트 1과 비트 0이 불 논리에 일치하는 결과(출력)를 생성하도록 전기의 흐름을 제어한다. 하나의 컴퓨터 내에 AND, OR, NOT이나 기타 불 연산자를 나타내는 논리 게이트를 결합할 수 있으며, 하나의 논리 게이트 출력이 다른 논리 게이트 입력으로 투입되어 최종 결과가 두 수의 합과 같은 의미 있는 데이터가 되도록 할 수 있다.

2. Boolean algebra 기본 공식

1]

1) X + 0 = X 2) X * 1 = X
3) X + 1 = 1 4) X * 0 = 0
5) X + X = X 6) X * X = X
7) X + X(bar) = 1
8) X * X(bar) = 0
9) X(bar*2) = X

2]

◎ 교환 법칙
⑩ X + Y = Y + X
⑪ X Y = Y X

◎ 결합 법칙
⑫ X + ( Y + Z ) = ( X + Y ) + Z
⑬ X ( Y Z ) = ( X Y ) Z

◎ 분배 법칙
⑭ X ( Y + Z ) = X Y + X Z
⑮ X + Y Z = ( X + Y )( X + Z )

3. Boolean algebra 에서 변수들의 상관관계를 표현하는 방법인 논리 게이트

1.OR Gate
 1+1 = 1

입력
출력
A
B
Y
0
0
0
0
1
1
1
0
1
1
1
1





논리식 : A+B

2.AND Gate
 
1*1=1,1*0=0
입력
출력
A
B
Y
0
0
0
0
1
0
1
0
0
1
1
1


논리식 : A*B

3.NOT Gate
낫게이트. 부정게이트 컴퓨터는 참을 0 아닌 모든수. 거짓을 0. 게이트를 통과하게 되면 값이 1 0으로 0 1 반전
입력
출력
A
Y
0
1
1
0

논리식 :  A(bar)

4.NAND Gate
AND+NOT.

입력
출력
A
B
Y
0
0
1
0
1
1
1
0
1
1
1
0

논리식 : A*B(전체 bar)

5.NOR Gate
OR+NOT.

입력
출력
A
B
Y
0
0
1
0
1
0
1
0
0
1
1
0

논리식 : A+B (전체 bar)
  
6.EX - OR Gate (배타적 논리 게이트)
서로 같지 않으면 1이 출력.
입력
출력
A
B
Y
0
0
0
0
1
1
1
0
1
1
1
0

7.EX - NOR Gate (일치 논리 회로)
서로 같으면 1출력.

입력
출력
A
B
Y
0
0
1
0
1
0
1
0
0
1
1
1

 

2010년 10월 5일 화요일

ASCII and Unicode

유니코드 (Unicode)


국제표준으로 제정된 2바이트계의 만국 공통의 국제 문자부호 체계(UCS: Universal Code System)를 말한다. 애플컴퓨터·IBM·마이크로소프트 등이 컨소시엄으로 설립한 유니코드(Unicode)가 1990년에 첫 버전을 발표하였고, ISO/IEC JTC1에서 1995년 9월 국제표준으로 제정하였다. 공식 명칭은ISO/IEC 10646-1(Universal Multiple-Octet Coded Character Set)이다.


데이터의 교환을 원활하게 하기 위하여 문자 1개에 부여되는 값을 16비트로 통일하였다. 코드의 1문자당 영어는 7비트, 비영어는 8비트, 한글이나 일본어는 16비트의 값을 지니는데, 이를 모두 16비트로 통일한 것이다. ISO/IEC 10646-1의 문자판에는 전세계에서 사용하고 있는 26개 언어의 문자와 특수기호에 대해 일일이 코드값을 부여하고 있다. 최대로 수용할 수 있는 문자수는 6만 5,536자이다. 이 가운데 3만 8,885자는 주요 국가의 언어를 구현하는 용도로 이미 할당되어 있고 6400자는 사용자 정의 영역으로, 나머지는 2만여 자는 새로 추가될 언어 영역으로 각각 비워두고 있다. 코드 할당비율을 보면 한자가 39.89%로 가장 많고, 한글 17.04%, 아스키 및 기호문자 10.39% 등의 순이다.

여기에 포함된 한글 코드 체계는 옛 한글의 자모를 포함한 한글자모 240자(HANGUL JAMO, 11열)와 한국표준인 KSC 5601의 조합형 한글자모 94자(HANGUL COMPATIBILITY, 31열), 한글에서 구현할 수 있는 최대 글자수 1만 1,172자를 가나다순으로 배열해 놓은 완성형(HANGUL, AC열∼D7열) 등 3종으로 되어 있다. 또한 각국의 문자를 2바이트로 수용하기 위해 우리나라와 중국·일본·타이완의 한자를 통합하였다. 한자의 비중이 높은만큼 동양권에서는 서체의 통합과 입출력 방식에 대해 계속 논의를 해오고 있다.

* 영문/숫자/한글/한자 등 모든 글자는 이론적으로 2바이트입니다. 그리고 파일에 저장될 때도 2바이트로 저장됩니다.

아주 희귀한 문자들은 2바이트를 초과할 수도 있습니다.

단, UTF-8 유니코드가 파일에 저장될 때, 영문/숫자는 아스키 코드와 똑같이 1바이트를 사용하고, 한글 등은 3바이트로 파일에 저장됩니다. UTF-8 유니코드는 아스키 코드와 영문 영역에서는 100% 호환됩니다. 만약 UTF-8 유니코드 문서에 한글 등이 전혀 없고, 영문과 숫자로만 이루어져 있다면, 그 파일은 아스키 코드와 동일합니다.

웹페이지를 유니코드로 만들 때에는 UTF-8 유니코드를 사용합니다.


* 전세계의 모든 언어를 하나의 파일에 쓸 수 있습니다. 물론 각 언어에 해당하는 폰트가 설치되어 있어야 합니다.

* 유니코드의 역사가 그리 오래되지 않아서, 아직도 유니코드를 잘 인식하지 못하는 컴퓨터가 있습니다. 특히 윈도우98이나 오래된 유닉스 시스템의 경우입니다. 그렇지만 유니코드로 작성된 인터넷 웹페이지는 대부분 잘 인식합니다.


(1) 보통의 한국어 텍스트 문서: 이것은 아스키 문서이며 유니코드가 아닙니다. 영문/숫자/기호는 1바이트. 한글과 한자는 2바이트로 표현됩니다. euc-kr 또는 ksc_c_5601-1987 로 불리는 인코딩이며 웹페이지 작성에 사용할 수 있습니다. 특수한 외국어 문자나 일본식/중국식 한자는 표현할 수 없습니다.

다음의 2개가 유니코드입니다:

(2) 일반 유니코드(Unicode): 모든 글자를 2바이트로 표현합니다. 전세계 모든 글자들을 한꺼번에 표현할 수 있습니다. 인터넷에 HTML 파일로 올릴 수 없습니다. 즉 웹페이지 작성에 쓸 수 없습니다.

(3) UTF-8 유니코드: 영문/숫자/기호는 1바이트로, 한글과 한자 등은 3바이트로 표현합니다. 전세계 모든 글자들을 한꺼번에 표현할 수 있습니다. 웹페이지 작성에 쓸 수 있습니다. (저의 mwultong.blogspot.com 이 블로그도 UTF-8 로 되어 있습니다)



아스키코드 (ASCII)




1963년 미국표준협회(ASA)에 의해 결정되어 미국의 표준부호가 되었다. 미니컴퓨터나 개인용 컴퓨터(PC)와 같은 소형 컴퓨터를 중심으로 보급되어 현재 국제적으로 널리 사용되고 있다.

아스키는 128개의 가능한 문자조합을 제공하는 7비트(bit) 부호로, 처음 32개의 부호는 인쇄와 전송 제어용으로 사용된다. 보통 기억장치는 8비트(1바이트, 256조합)이고, 아스키는 단지 128개의 문자만 사용하기 때문에 나머지 비트는 패러티 비트나 특정문자로 사용된다.

일반적으로 컴퓨터는 데이터를 8개의 비트 단위로 묶어 한 번에 처리한다. 비트는 2진법의 0과 1 가운데 하나를 나타내는 단위이다. 즉, 1비트는 0이 될 수도 있고, 1이 될 수도 있다. 비트 8개를 모아 놓은 것을 바이트(byte)라고 부른다. 그러므로 1바이트로 표시할 수 있는 최대 문자의 수는 256조합이 된다.

따라서 컴퓨터에서는 8비트씩을 묶어 처리하는 것이 가장 효율적이다. 예컨대 7개 비트 이하로 묶을 경우에는 표현 가능한 수가 128이 된다. 그러나 이 숫자로는 세계 여러 나라에서 사용하는 모든 숫자·국가언어·기호 등을 충분히 표현할 수 없다. 반면에 9비트 이상일 경우에는 512가지나 되어 필요없는 영역이 많이 생기게 된다. 이 때문에 256가지의 영역마다 어떤 원칙에 의해 표현 가능한 모든 숫자·문자·특수문자를 하나씩 정해 놓은 것이 곧 아스키코드이다.

* 현재 사용되는 아스키(ASCII) 코드의 더 정확한 이름은 ANSI Code 입니다. (색깔을 나타내는 앤시 코드가 아니고 문자를 나타내는 규약입니다.)

* 영문/숫자 1글자는 1바이트, 한글/한자 1글자는 2바이트입니다.

* 하나의 인코딩당, 영문과 또다른 하나의 언어만 사용할 수 있습니다. 한국어 아스키 코드인 완성형(euc-kr) 인코딩에서는 영문과 한글 그리고 한국에서 사용되는 한자만 표현할 수 있습니다. 물론 일본어 가나도 섞여 있지만, 일본어 인코딩이 아니기에 일본인은 읽을 수 없습니다.

그래서 하나의 파일에 여러 언어를 동시에 표현하기 힘들거나 불가능합니다.

* 컴퓨터 초창기부터 사용되어 왔기에, 호환성이 아주 좋습니다.

* MS윈도우2000/XP이상의 운영체제에서는, 내부적으로 유니코드를 사용하지만, 사용자가 실제 읽고 쓰는 텍스트 문서는 대부분 아스키 코드입니다.

진법에 관하여~

진법

가장 간단한 진법은 1진법으로, 모든 자연수를 그 수 만큼의 숫자로 표현하는 것이다. 예를 들어서 숫자 7은 *******라고 표현할 수 있다. 일반적으로 1진법은 작은 숫자에 대해서만 유용하지만, 컴퓨터 과학 분야에서 사용되기도 한다.

1진법 표기는 좀 더 큰 값을 나타내는 다른 기호를 도입해서 간소화할 수 있다. 보통 이 기호들은 10의 거듭제곱을 표시하는 경우가 많다. 예를 들어서, *로 1을 나타내고, #로 10을 나타내고, @로 100을 나타낸다면, 403은 @@@@ ***로, 125는 @ ## *****로 간단하게 나타낼 수 있다. 고대 이집트 수 체계가 이러한 방법을 사용하며, 로마 숫자는 이 방법의 확장이다.

어떤 기호가 반복된 횟수를 나타내기 위한 특별한 기호를 도입해서 이를 더 간소화할 수 있다. 예를 들어서, 라틴 알파벳의 첫 아홉 글자(A부터 I까지)를 각각 "한 번"부터 "아홉 번"을 나타내기 위해서 사용한다면, 403이라는 숫자를 D@ C*라고 표현할 수 있다. 문자로 나타낼 때의 수 체계와 상관 없이, 한국어("사백 삼")와 영어("four hundred [and] three")를 비롯한 많은 자연어들이 이런 방법을 사용한다.

이보다 더 발전된 형태는 위치 기수법이다. 앞에서 사용한 "한 번"부터 "아홉 번"까지의 기호에 0을 나타내는 o라는 기호를 덧붙이고, 이 기호가 실제로 의미하는 값은 기호의 위치에 따라 10의 거듭제곱을 곱해서 표시한다고 하면, 2005라는 숫자는 BooE로 표현할 수 있다. 이때 0은 해당 거듭제곱을 "건너 뛰기" 위해서 필요하며, 다른 수 체계에서는 사용하지 않지만 매우 중요한 역할을 한다. 인도로부터 유래한 아라비아 숫자는 10을 밑으로 하는 위치 기수법으로, 현재 세계적으로 널리 쓰이고 있다.

위치 기수법을 사용한 계산은 앞에서 설명한 다른 기수법을 사용할 때보다 훨씬 쉽다. 또한 위치 기수법은 가능한 어떤 숫자를 표현하기 위해서 무한히 많은 기호를 도입할 필요가 없다. 예를 들어서 아라비아 숫자의 경우 0부터 9까지의 10개의 기호만으로 모든 자연수를 표현할 수 있다.

10진 위치 기수법은 현재 가장 널리 사용되고 있다. 이는 인간이 열 개의 손가락을 가지고 있다는 데서 유래한 것으로 보인다.

현재까지 역사적으로 사용되었거나 현재 사용되고 있는 기수들은 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 16, 20, 60이 있다. 그 중 2진법과 8진법, 그리고 16진법은 컴퓨터에서 자주 사용된다.






1. 진법 계산

10진법을 다른 진법으로 변환시키는 방법
10진법의 수를 다른 진법으로 나누어서 그 나머지를 취한 결과를 의미한다.

10진법을 8진법으로 변환시키는 방법
예) 10진수 259를 8진법으로 변환
259를 8로 나눈후 나머지 값을 뒤에서부터 쓰면 된다.

10진법을 2진법으로 변환시키는 방법
예) 10진수 125을 2진법으로 변환
125를 2로 나누어서 그 나머지를 뒤에서부터 쓰면 된다.

10진법을 16진법으로 변환시키는 방법
예) 10진수 735를 16진법으로 변환
735를 16으로 나누어 그 나머지를 뒤에서부터 쓰면 된다.

다른 진법을 10진법으로 변환시키는 과정
8진법을 10진법으로 변환시키는 과정
예) 8진수 413을 10진법으로 변환
4 * 82 + 1* 8 + 3 * 1

2진법을 10진법으로 변환시키는 과정
예) 2진수 1101을 10진법으로 변환
1 * 23 + 1 * 22 + 0 * 2 + 1 * 1

16진법을 10진법으로 변환시키는 과정
예) 16진수 AC5를 10진법으로 변환
A * 162 + C * 16 + 5 * 1 =

2진법을 8진법으로 변환시키는 방법
2진수 11011011011001을 8진법으로 변환시키는 과정
오른쪽부터 3bit씩 묶는다.
11 011 011 011 001


11011011011001(2) =33331(8)


2진법을 16진법으로 변환시키는 방법
①2진수 1110101011011를 16진법으로 변환시키는 과정
②오른쪽부터 4bit씩 묶는다.
1110101011011(2) = 1D5B(16)

8진법을 16진법으로 변환시키는 방법
8진수 1572를 16진수로 변환
8진수 1자리를 2진수 3bit로 펼쳤다가 2진수 4bit씩 오른쪽부터 묶는다.
1572(8) = 37A(16)
소숫점 이하 자릿수의 진법 변환
10진법을 8진법으로 변환시키는 과정
8진법을 10진법으로 변환시키는 과정
2진법을 10진법으로 변환시키는 과정


2. 진법의 연산

덧셈
10진수에서 더한 값이 10이 되었을 때 자리 올림(Carry)이 발생하듯이, 2진수에서는 더한 값이 2가 되면 자리 올림이 발생한다.

뺄셈
전자계산기에서의 뺄셈은 빼는 수의 보수를 더하여 계산한다.

보수는 2의 보수와 1의 보수가 존재한다.

2진수의 보수
1의 보수 : 각 자리값을 1은 0으로, 0은 1로 바꾸어 구한다.
2의 보수 : 1의 보수와 1을 더해서 구한다.
보기) 01001의 보수

1의 보수 : 10110
2의 보수 : 10111
1의 보수를 이용한 뺄셈
빼는 수의 1의 보수를 더한다.

자리 올림수(Carry) 발생시 : 자리 올림수를 버린다.

자리 올림수(Carry) 미발생시 : 결과값의 2의 보수를 산출한 후 부호 -를 붙인다.

예 1) (11101)2 - (00110)2의 계산


11101

+ 11010 (←00110의 2의 보수)

올림수는 버린다← 110111

올림수가 발생했으므로 올림수를 버린 나머지 결과가 최종 결과값이다.

(11101)2 - (00110)2 = (10111)2

예2) (1001)2 - (1101)2 의 계산
1001 .

+ 0011 (←1101의 2의 보수)

1100

올림수가 발생하지 않았으므로 결과값 1100의 2의 보수를 구하면, 0100이 나오고 이 값에 (-)를 붙인 값이 최종 결과값이다.

(1001)2 - (1101)2 = (-0100)2


곱셈과 나눗셈
2진수의 곱셈은 덧셈의 반복으로, 나눗셈은 뺄셈의 반복으로 이루어진다.

3.진법 변환