public class CheckNum {
	private int year, month, day, age, sex, local;
	private String num;
	Calendar date = Calendar.getInstance();

	// 생성자
	CheckNum(String num) {
		this.num = num;
	}

	/**
	 * 910000-'1'234561 생년월일, 성별, 나이 출력하기 1 : 1900년대 내국인 남자, 2: 1900년대 내국인 여자 3
	 * : 2000년대 내국인 남자, 4: 2000년대 내국인 여자 5 : 1900년대 외국인 남자, 6: 1900년대 외국인 여자 7 :
	 * 2000년대 외국인 남자, 8: 2000년대 외국인 여자 9 : 1800년대 내국인 남자, 0: 1800년대 내국인 여자 생년월일
	 * 값을 받고 Calendar 클래스 사용해서 현재나이 구함.
	 */
	void infoPrint() {
		char gender = num.charAt(7);
		year = Integer.parseInt(num.substring(0, 2));
		month = Integer.parseInt(num.substring(2, 4));
		day = Integer.parseInt(num.substring(4, 6));

		// 7번째 숫자로 성별, 년도, 내/외국인 확인
		switch (gender) {
		case '1':
			year += 1900;
			sex = 0;
			local = 1;
			break;
		case '2':
			year += 1900;
			sex = 1;
			local = 1;
			break;
		case '3':
			year += 2000;
			sex = 0;
			local = 1;
			break;
		case '4':
			year += 2000;
			sex = 1;
			local = 1;
			break;
		case '5':
			year += 1900;
			sex = 0;
			local = 0;
			break;
		case '6':
			year += 1900;
			sex = 1;
			local = 0;
			break;
		case '7':
			year += 2000;
			sex = 0;
			local = 0;
			break;
		case '8':
			year += 2000;
			sex = 1;
			local = 0;
			break;
		case '9':
			year += 1800;
			sex = 0;
			local = 1;
			break;
		case '0':
			year += 1800;
			sex = 1;
			local = 1;
			break;
		}
		age = (date.get(Calendar.YEAR)) - year + 1;

		char sexchk = sex != 1 ? '남' : '여';
		System.out.println("성별 : " + sexchk);
		System.out.println("나이 : " + age);
		System.out.println("생년월일 : " + year + "/" + month + "/" + day);
		System.out.println("내국인 : " + (local == 1 ? "yes" : "no"));
	}
}

위 코드가 전체 코드가 아니라 일부이여서 각자 맞게 사용해야한다.


public class Star05 {
	public static void main(String[] args) {
		int in = 9;
		for (int line = in; in / 2 < line; line--) {
			for (int j = 0; j < line; j++) {
				System.out.print((in - line) <= j ? "*" : " ");
			}
			System.out.println("");
		}
	}
}

책마다 다른 내용인 argument 와 parameter. 왜 두 개의 단어로 나누어져 있는가?

대체 뭐가 뭔지 모르겠고 어떤 것을 어떻게 불러야할지 몰라서 찾아봤다. 


매개변수(媒介變數), 파라미터(parameter), 모수(母數)는 수학과 통계학에서 어떠한 시스템이나 함수의 특정한 성질을 나타내는 변수를 말한다. 일반적으로는 θ라고 표현되며, 다른 표시는 각각 독특한 뜻을 지닌다. 함수의 수치를 정해진 변역에서 구하거나 시스템의 반응을 결정할 때는 독립변수는 변하지만 매개변수는 일정하다. 다른 매개변수를 이용해 함수의 다른 수치를 다시 구하거나 시스템의 다른 반응을 볼 수도 있다.  - 위키백과


위키백과에서는 아예 통째로 같은 단어로 치는 것 같다. 네이버 지식백과(argument, parameter)를 찾아보아도 동의어로 나온다. 그럼 대체 무엇이 다른점일까?

ANSI C 표준문서에서는 서로 다른 뜻으로 있다.



구글 번역기와 모자란 영어능력으로 이 둘을 간단하게 설명하자면 다음과 같다.

argument : 인수

함수의 호출식 안에 콤마로 구분된 변수.

parameter : 매개 변수 

함수의 선언부나 구현부에 있는 변수.


코드를 보면 훨씬 이해가 쉬울 것이다.

void sample(int parameter){    //int parameter는 parameter, 매개변수이다.
    printf("%d", parameter);
}
void main(){
    sample(3);    //3은 argument, 인수이다.
}


어셈블리어(assembly)는 기계어와 일대일 대응이 되는 컴퓨터 프로그래밍의 저급 언어이다. 

- 위키백과


어셈블러(assembler)는 어셈블리어를 기계어 형태의 오브젝트 코드로 해석해 주는 컴퓨터 프로그램(언어번역 프로그램)을 말한다. 어셈블러는 기본 컴퓨터 명령어들을, 컴퓨터 프로세서가 기본 연산을 수행하는데 사용할 수 있는 비트 패턴으로 변환시키는 프로그램이다. 

- 위키백과


초창기엔 기계어로 직접 프로그래밍을 하였다. 하지만 사람에겐 어렵기만한 언어였다. 결국 어셈블리 언어를 개발하였고 이는 0과 1로 된 기계 코드 명령어를 대신하는 기호화 코드(mnemonic)를 이용하여 만든 것이다. 니모닉 코드란 mnemonic, 기억을 돕는다는 의미로 기억하기 쉽도록 간략하게 만든 코드를 말한다.


어셈블러란 어셈블리어를 기계어로 번역해주는 프로그램으로 C로 작성된 코드를 실행하기 위해 C 컴파일러로 기계어로 번역해주는 역할과 같다.



public class Star04 {
	public static void main(String[] args) {
		int in = 5;
		for (int line = 0; line < in; line++) {
			for (int j = 0; j < in; j++) {
				System.out.print(line <= j ? "*" : " ");
			}
			System.out.println("");
		}
	}

}


public class Star03 {

	public static void main(String[] args) {
		int in = 5;
		for(int line = 0; line < in; line++) {
			for(int j = in; j > 0; j--) {
				System.out.print(j <= line + 1 ? "*" : " ");
			}
			System.out.println("");
		}
	}

}


public class Star02 {

	public static void main(String[] args) {
		int in = 5;
		for (int line = 0; line < in; line++) {
			for (int j = in; j > line; j--) {
				System.out.print("*");
			}
			System.out.println("");
		}
	}

}


public class Star01 {
	public static void main(String args[]) {
		int in = 5;
		for (int line = 0; line < in; line++) {
			for (int j = 0; j <= line; j++) {
				System.out.print("*");
			}
			System.out.println("");
		}
	}
}


Java programming의 메인메서드의 선언부

public static void main(String args[])

public : 다른 클래스나 메서드에서 사용되어야 하기 때문에 사용된다.

static :  메인메서드는 따로 생성되지 않고 사용될수 있어야 하기 때문에 컴파일시 바로 메모리에 올릴수 있도록 사용한다.

void : main메서드는 프로그램의 시작이자 끝이기 때문에 반환값을 void로 한다.

String args[] : 프로그램을 실행할 때 따로 매개변수로 문자열을 받을 때 사용한다.

A(assemble) : 어셈블 명령를 메모리에 입력하는데 사용

-A <시작 번지> 



시작 번지를 지정해주고 다음 줄부터 명령어를 입력해 주면된다. debug는 모든 숫자를 16진수로 처리하므로 뒤에 'H'를 붙히지 않아도 된다. 하지만 다른 어셈블리어 프로그램에서는 숫자 뒤에 'H'를 붙혀줘야 한다.

※ 100H부터 시작한 이유는 처음 100H(256)바이트는 DOS에 의해 예약되어 있으며 사용자 프로그램이 사용해서는 안된다.


U(unassemble) 명령 : 기계 코드 확인

-U <시작 번지> <끝 번지>

-U <시작 번지> <L 바이트 수> 



메모리에 있는 기계 코드와 어셈블리어를 보여준다. A 명령이 입력한 어셈블리 명령어를 기계코드로 변환하여 메모리제 저장하는 반면, U 명령은 메모리에 저장된 기계코드를 어셈블리 명령으로 변환해 보여준다.


G(go) 명령 : 실행 명령

-G <=시작 번지> <정지 번지(들)> 



시작번지에서부터 정지번지까지의 명령어들을  실행시키는 명령어이다. 위 사진은 g만 입력했으므로 메모리에 저장된 명령어들을 모두 실행한 것이다. 정지 번지에는 10개까지 넣을 수 있으며 각 브레이크 포인트에서 실행을 멈춘다. 

먼저 DOS상태에서 Debug 프로그램으로 들어가기 위해서는 cmd창에서 debug를 입력하면된다.

(윈도우7 64bit는 debug가 되지 않아서 DOSBox를 이용해서 들어가기 때문에 debug.exe로 들어갔다.)

들어가게되면 '-'가 나타나며, 입력을 기다리게 된다. 빠져나오는 방법은 q(quit)를 입력하면 된다.



레지스터의 내용 확인 및 변경하기.

 -r <레지스터 이름>


첫번째 줄 : 범용 레지스터, 포인터 및 인덱스 레지스터의 내용

두번째 줄 : 세그먼트 레지스터의 내용, 명령 포인터의 현재값 및 플래그 레지스터 비트

  두번째 줄의 끝에 'NV UP EI ...NC'는 플래그 레지스터의 8비트의 상태를 나타냄.

세번째 줄 : CS:IP가 가리키는 명령어, 시스템에 따라 다름.


Debug로 처음 들어가면, 범용 레지스터가 0으로 설정되고 플래그 비트도 모두 리셋된다. 

세그먼트 레지스터의 내용은 사용하고 있는 시스템에 따라 다르지만, 모든 세그먼트는 동일한 값을 가지며 이것은 DOS 오퍼레이팅 시스템에 의해 정해졌기 때문에 내용을 바꾸지 말것을 권고한다.


레지스터의 내용 수정방법은 아래 사진으로 확인하기 바란다.



1. 24K 바이트는 몇 바이트인가?

1024 x 24 = 24576 byte


2. RAM은 무엇의 약자인가? 컴퓨터에서 RAM은 어떻게 이용되는가?

Random Access Memory. 휘발성 메모리로써 실행되고 있는 프로그램을 일시적으로 저장하기 위해 이용,

    사용자나 프로그램에 의해 그 내용을 바꿀 수 있는 정보를 저장하기 위해 사용된다.


3. ROM은 무엇의 약자인가? 컴퓨터에서 ROM은 어떻게 이용되는가?
Read Only Memory. 비휘발성 메모리로써 컴퓨터 작동에 필수적인 프로그램과 정보를 보관하며 사용자가 정보를 바꿀 수 없다(프로그램을 통해 바꿀수도 있지만 보통 바꿀 수 없다.)


4. RAM을 왜 휘발성 메모리라고 하는가?

전원을 끄면 메모리에 저장된 정보는 없어지기 때문이다.


5. 컴퓨터의 가장 중요한 세 가지 구성요소를 나열하다.

CPU, 메모리, I/O장치


6. CPU는 무엇의 약자인가? 컴퓨터에서 CPU의 기능을 설명하라.

Central Processing Unit. 컴퓨터의 두뇌라고 할 수 있으며, 메모리에 저장되어 있는 명령어를 읽어와서 수행한다.

프로그램을 수행하고 컴퓨터 내의 모든 장치를 제어한다.


7. 세 가지 종류의 버스를 열거하고 이등 각각의 기능을 간단히 서술하라.

data bus, address bus, control bus

data bus : CPU와 장치 사이의 정보 교환을 위해 사용되며 크기가 클수록 CPU의 성능이 좋아진다.

address bus : CPU에 연결된 메모리와 장치를 선택하여 그 번지를 전송하며 버스가 클수록 더 많은 양의 메모리를 지정할 수 있다.

control bus : CPU에 의해 사용되며 I/O장치를 제어하는 신호를 전달한다.


8. 다음의 버스 중 어느 것이 단방향이고 어느 것이 양방향 버스인지 밝혀라.

  데이터 버스 : 양방향         어드레스 버스 : 단방향


9. 어떤 컴퓨터의 어드레스 버스가 16라인이면 이 컴퓨터의 CPU가 다룰 수 있는 최대 메모리의 크기는 얼마인가?

2의 16승으로 65536, 64K 이다.


10. ALU는 무엇의 약자인가? 또 그 기능은 무엇인가?
Arithmetic/Logic Unit. CPU내에서 산술연산과 논리연산을 하는 연산장치이다.


11. CPU 내의 레지스터는 어떤 목적으로 이용되는가?
정보를 일시적으로 저장한다.


12. 프로그램 카운터의 기능은 무엇인가?
다음에 수행할 명령어의 번지수를 기억한다.


13. 명령어 디코더의 기능은 무엇인가?
CPU 내부로 읽어온 명령어를 해독하는 역할, 모든 명령어의 의미를 보관하고서 어떤 명령어가 주어지면 CPU에게 어떤 작업을 해야 하는지 알려준다.

컴퓨터의 내부 구조

모든 컴퓨터의 내부 구조는 크게 세 부분으로 나누어진다. : 

  CPU(Central Processing Unit, 중앙처리장치), 메모리, I/O(Input/Output, 입출력) 장치.

CPU는 버스(bus)라 불리는 여러 가닥의 전선을 통해 메모리와 I/O장치에 연결되어 있다.

컴퓨터에는 어드레스 버스(address bus), 데이터 버스(data bus), 컨트롤 버스(control bus)의 세 가지 종류의 버스가 있다.


버스(bus) : 구성 요소들간에 교환할 각종 정보들을 전송하는 선(line)들로 구성.

1) 데이터 버스(data bus)

  · CPU와 장치 사이의 정보 교환을 위한 선들의 집합.

  · 양방향 전송.

  · 크기가 클수록 CPU의 성능이 좋다고 할 수 있다.

2) 어드레스 버스(address bus)

  · CPU에 연결된 메모리와 장치를 선택하기 위한 선들의 집합.

  · 단방향 전송

  · 클수록 더 많은 양의 메모리 혹은 장치를 번지지정할 수 있다.(기억장치의 용량이 결정)

    x를 어드레스 라인의 수라고 할 때 메모리의 최대 위치 개수는 

3) 컨트롤 버스(control bus)

  · CPU와 기억장치 및 I/O 장치 사이에 제어 신호들을 전송하는 선들의 집합.


CPU와 RAM, ROM과의 관계

CPU가 처리할 정보는 RAM이나 ROM에 저장되어 있어야 한다. ROM(Read Only Memory)은 비휘발성 메모리로써 컴퓨터 작동에 필수적인 프로그램, RAM을 테스트하고 설치된 RAM의 크기를 알아내는 프로그램등 변하지 않고 꼭 필요한 정보만을 보관하고 있다가 CPU에 제공한다. RAM(Random Access Memory)은 전원을 끄면 보관되어 있던 데이터는 모두 사라지는 휘발성 메모리로써 실행되고 있는 프로그램을 일시적으로 저장하거나 사용자나 프로그램에 의해 내용을 바꿀수 있는 정보를 저장하기 위해 사용되며 예로 들면 워드프로세싱, 운영체제등 응용프로그램들이 해당된다.

CPU는 처리할 정보를 먼저 RAM, ROM에서 찾아보고 없을 경우 디스크에서 찾는다. 디스크에 있는 정보는 먼저 RAM으로 옮겨진 다음 처리되는데 이런 이유로 해서 RAM, ROM을 주기억장치(primary memory), 디스크를 보조기억장치(secondary memory)라 부르기도 한다.


CPU의 내부

CPU의 가장 기본적인 기능은 메모리에 저장되어 있는 명령어를 읽어와서 수행하는 것이다.  

1. 레지스터(register)CPU가 가지고 있는 자원 중 가장 중요한 것으로 정보를 일시적으로 저장하기 위해 사용

   레지스터가 많을수록 좋은 CPU지만 그 만큼 가격이 비싸다.

2. ALU(Arithmetic / Logic Unit, 연산장치) : 산술연산과 논리연산을 수행한다.

3. PC(Program counter) : 다음에 수행할 명령어의 주소를 가르킴. IBM PC에서는 IP(instruction pointer)라고 부른다

4. 명령어 디코더(instruction decoder) : CPU 내부로 읽어온 명령어를 해독하는 역할.

   따라서 명령어의 의미를 보관하고 있다가 어떤 명령어가 주어지면 CPU가 어떤 작업을 해야 하는지 알려주는 역할.


2013/09/05 - [대학 정리노트/어셈블리] - [어셈] win7 debug 사용방법 - DOSBox 다운, 사용


이전 포스트에서 DOSBox를 설치하였다. 입력창에 debug를 쳐도 계속 되지않아서 몇시간째 고민이다.

해결방법은 여러가지였다. 먼저 특별버전인 DOSBox SVN을 설치해서 사용하던지, debug.exe를 받아서 실행하는 방법이 있었고 나는 후자인 현재 받은 DOSBox에서 debug.exe를 사용하는 방법을 선택했다.

먼저 SVN버전을 다운받을수 있는 카페와 다른빌드 사이트이다.


DOSBox SVN DAUM버전

위 카페말고 다운로드 사이트

그 외 다른 빌드


이제 DOSBox에서 debug 사용방법이다. 방법은 아주 간단하다.

먼저 아래 링크를 통해 debug.exe 파일을 받는다.


 debug.exe


압축을 풀고 원하는 폴더에 넣는다. (나는 D 드라이브에 넣었다.)

먼저 D드라이브를 마운트(DOSBox에서 해당 드라이브를 인식?시킨다.)하고 debug.exe를 실행시키면된다.



윈도우7 덕분에 어셈블리공부는 시작도 안했지만 뭐하나 하더라도 어려울것 같다... 우선 차근차근 하나씩 배워나가야겠다.

이번 학기 수업으로 어셈블리언어를 듣게 되었는데 window 7 64bit 에서는 cmd에서 debug가 안된다고 한다. OS를 갈아타긴 좀 무리인가 싶어 DOSBox를 다운받았다. DOS모드에서 실행되던 고전게임을 실행하기 위한 에뮬레이션이라고 하는데 debug가 되니 어셈을 공부하기에 딱인 듯 싶다.


 DOSBox 다운로드(새창)


먼저 처음 실행을 하고나면 아래와 같은 화면이 나온다. 처음에 Z드라이브로 시작되는데 C드라이브(혹은 작업할 드라이브)로 이동하려면 mount c c:\ 를 입력한다.



아래 화면과 같이 마운팅 시키고난 뒤에 c: 를 입력하면 바뀌게 된다. 

dir은 현재 폴더에 있는 파일,폴더 목록을 보여주는 명령어이다.



폴더를 확인하고 cd 폴더명으로 이동하면 된다.

상위폴더로 이동하는 것은 cd.. 이다.



다음 포스팅에는 debug를 해보고 사용방법에 대해서 포스팅하겠다.

결과화면

 



package basics_of_SWT;

import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

/*
 * SWT 윈도우 프로그램의 핵심 구조를 잘보여주는 코드.
 */

public class swt_windowProgram_coreStructure {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Display display = new Display();	// 디스플레이 객체를 생성한다.
		Shell shell = new Shell(display);	// 셸 객체를 생성(윈도우)한다.
		shell.setText("SWT basic code");	// 윈도우의 타이틀을 설정한다.
		
		shell.pack();	// 셸 컴트롤의 크기를 최적화한다.
		shell.open();	// 화면에 나타나도록 한다.
		
		// SWT 윈도우 프로그램의 핵심, 이벤트 처리 루틴
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch()) {
				display.sleep();
			}
		}
		
		display.dispose();	// 디스플레이 객체를 소멸시킨다.
	}

}





 GitHub란?

기트허브(GitHub, /'ɡɪtˌhʌb/)는 Git를 사용하는 프로젝트를 지원하는 웹 기반의 호스팅 서비스이다. 루비 온 레일스로 작성되었다. GitHub는 영리적인 서비스와 오픈소스를 위한 무상 서비스를 모두 제공한다. 2009년의 Git 사용자 조사에 따르면 GitHub는 가장 인기있는 Git 호스팅 사이트이다. 또한 2011년의 조사에서는 가장 인기있는 오픈 소스 코드 저장소로 꼽혔다.

GitHub는 pastebin과 유사한 서비스와 위키를 각 저장소마다 운영하고 있으며 git 저장소를 통해 고칠 수 있다.

2010년 1월부터 GitHub는 GitHub, Inc. 라는 이름으로 운영되고 있다.

위키백과


 GitHub 홈페이지

GitHub 간편 안내서


문제점 : Android Virtual Devices(AVD)에서 emulator을 실행할 때 나는 오류 "emulator-arm.exe의 작동이 중지되었습니다.".


해결방안 : AVD Manager - Edit 에서 Memory Options -> RAM의 크기를 800 ~ 900 사이로 정해준다.



스마트 모바일 앱개발 지원센터(SMAC : Smart Mobile Application Center)에서 open API를 사용하기 편리하게 모아서 보여주고 있습니다.


 SMAC open API

SMAC 메뉴 -> 개발정보 -> open API


행정안전부에서 제공하는 도로명주소 데이터입니다.


도로명 주소 검색


도로명 주소 DB


도로명 주소 매칭테이블


이산구조 마지막 과제로 만든 피피티.

급하게 만드느라 사진달랑 한장에 텍스트만 여기저기 + 애니메이션만 모아놨네요.

피피티는 다른 블로그를 보면서 틈틈히 공부중입니다. 좀 더 어마어마하게 만들 실력은 아직 부족한가보네요...

그리고, 요즘 프레지가 인기라던데 한번 배워봐야 겠습니다.

 

 

 

 

 

 

 

 

 

 

 

 

이번 포스팅은 몇백줄, 몇천줄의 코딩을 하다가 에러가 났는데 몇번째 줄인지 찾을 수 없을 때

쉽게 찾을수 있도록 이클립스에 라인넘버를 설정하는 방법입니다.

 

라인넘버가 없는 화면입니다.

 

Window - Preferences 를 선탭합니다.

 

General - Editors - Text Editors 경로를 선택 후 오른쪽 화면에 Show line numbers 를 선택합니다.

 

라인넘버가 설정된 사진입니다.

간단한 방법으로 라인넘버를 설정하는 포스팅이었습니다. 감사합니다.

 

이클립스를 사용하는데 글씨가 너무 작아서 I 인지 L 인지 구별도 안가고, 피로감이 몰려와 하기싫어지면 안되겠죠.... 많은 분들이 이클립스를 사용하시는데 이번 크기는 글씨 크기를 키우는 방법에 대해서 알려드리겠습니다.

 

Window - Preferences 를 클릭해줍니다.

 

General - Appeareance - Colors and Fonts 로 들어가지면

Java Editer Text Font 를 더블클릭 또는 오른쪽 상단에 Edit를 클릭해줍니다.

( 저의 경우는 JAVA만 바꾸도록 하였습니다. 원하는 언어의 폰트를 변경하거나 Basic(이클립스 기본)에서 Font를 변경하시면 글씨 크기, 글씨체, 글꼴 스타일을 바꾸실수 있습니다. )

 

위 사진과 같이 크기를 알맞은 크기로 변경후 확인하시면 글씨크기를 바꾸실수 있습니다.

이클립스 글자크기를 설정하는 포스팅을 이만 마치겠습니다.


조합논리회로 :

논리곱(AND), 논리합(OR), 논리부정(NOT)이라는 기본 논리회로의 조합으로 만들어지며, 입력신로, 논리게이트 및 출력신호로 구성. -> 현재의 입력에 의해서만 출력된다.

조합논리로는 가산기(adder), 비교기(comparator), 디코더(decoder), 인코더(encoder), 멀티플렉서(multiplexer), 디멀티플렉서(demultiplexer), 코드변환기(code-converter) 등이 있다.

 

[그림] 조합논리회로 블록도

 

가산기

1. 반가산기(half-adder : HA) :

자리올림값을 받지않으며 한 자리 2진수 2개 입력하여 합(sum)과 자리올림(carry)를 계산하는 덧셈회로.

 

 

입력

출력 

X

Y

S

C

0

0

0

0

0

1

1

0

1

0

1

0

1

1

0

1

[표] 진리표

[그림] 논리식

 

 

[그림] 논리기호

[그림] 논리회로

 

 

2. 전가산기(full-adder : FA) :

자리올림값(carry)로 입력받는 경우.

 

 

 

 

[그림] 논리식

 

입력

출력

X

Y

 

S

0

0

0

0

0

0

1

0

0

1

1

0

0

1

0

1

1

0

1

0

1

0

0

1

1

1

0

1

1

1

1

1

 

[그림] 논리기호

[표] 진리표

 [그림] 논리회로

  

[그림] 반가산기를 이용한 전가산기 회로

 

 

3. 병렬가감산기

전가산기 여러개를 병렬로 연결하면 2비트 이상인 가산가를 만들 수 있다. 이를 병렬가산기(parallel-adder)라고한다. 계산 결과 합은 이며, 최종 캐리는 다.

 

[그림] 전가산기를 이용한 병렬가산기

 

위 병렬가산기의 Y에 부호 S(sign)와 XOR하여 입력하면 덧셈과 뺄셈 모두 가능하다. 즉, S가 1이면 Y의 값은 반전이 되어 1의 보수가 입력된다. 그리고 캐리의 값도 1이 입력되어 결과적으로 Y의 2의 보수가 만들어진다.

그러므로 병렬가감산기(parallel-adder/subtracter) 회로가 된다.

 

[그림] 병렬가감산기

 


이클립스를 이용해 자바로 작성한 프로그램을 실행시킬 수 있도록 실행파일(exe)로 변환하는 방법에 대해 포스팅하겠습니다. 준비물로는 작성된 소스파일, 이클립스, JSmooth 이렇게 세 가지가 필요합니다.

JSmooth링크와 아래 그림을 통해 다운 받으시면 됩니다.

 

1. JSmooth 설치하기

 

 

 

 

JSmooth 설치가 끝나셨다면 이클립스를 통해 jar파일을 생성하도록 하겠습니다.

 

 

2. *.jar 파일 생성하기

 

프로젝트에 오른쪽 버튼 클릭 후 Export 를 클릭합니다. 

 

Java - Rnuable JAR file 선택 후 Next로 이동합니다.

 

먼저 Export destination에 .jar파일을 저장 할 위치를 지정해주고,

Launch configuration에는 만들고자 하는 클래스와 프로젝트를 선택하고 만들어주시면 됩니다.

 

 

3. JSmooth를 이용하여 exe파일 만들기

 

위 사진은 JSmooth 첫 실행화면입니다.

 

Skeletion Selection에 콘솔창 프로그램이라면 Consol Wrapper을, 윈도우창(AWT, Swing)이라면 Windowed Wrapper을 선택 후, 윈도우창을 선택했을 경우 아래 체크하시기 바랍니다.

 

위에는 .exe 파일의 경로를 선택하시고 아래는 아이콘으로 선택합니다.

 

먼저 아래에 .jar 파일을 선택하시고, 다음 Main class에 메인클래스를 선택합니다.

 

JVM 버전을 작성합니다.

 

모두 마친 후에 Project - compile 을 선택합니다.

 

JSmoonth파일을 생성할 위치를 선택하시고나면 exe파일이 만들어집니다.

 

위 사진과 같이 바탕화면에 두개의 파일이 만들어졌습니다.

이상으로 이클립스를 이용하여 자바 실행파일 만드는 방법에 대한 포스팅을 마치겠습니다.

+ Recent posts