Programming/Codeup.kr기초100제 && 컴퓨터 이야기

[기초-입출력] 실수 한 개 입력받아 부분별로 출력하기 && ALU

피터파스칼 2016. 11. 14. 23:05

연산이란 컴퓨터의 외부로부터 입력되는 자료, 기억 장치 내에 보관된 자료, 중앙 처리 장치내의 기억 장치인 레지스터에 보관던 자료등을 처리하는 것을 말한다. 연산에 사용되는 자료의 성질에 따라 비수치적 연산과 수치적 연산이있다. 또, 사용되는 자료의 수에 따라 단항연산과 2진 연산으로 나눈다. 


 ALU(산술 논리 연산 장치)는 산술 연산과 두 수의 크기를 비교하고 판단하는 논리 연산을 담당하는 장치이다. 산술연산엔 10진수 계산과 고정소수점 연산 및 부동 소수 점 연산 등이 있다. 그리고 논리 연산에는 로드, 스토어, 시프트, 비교 및 분기, 편집, 변환 등이있다.


ALU의 구성으로는 가산기를 중심으로 레지스터, 보수를 만드는 보수기, 오버 플로를 검사하는 오버플로 검출기 등으로 구성된다.


●가산기:  2개의 수를 더할 수 이쓴 전가산기를 필요로 하며 전가산기의 수는 직렬일때는 1개가 필요하지만 병렬 연산방식에는 데이터를 구성하는 비트의 수만큼 필요하다.


보수기: 컴퓨터에서 뺄셈을 할 때에 빼는 수를 보수로 바꾸어 가산기에 입력하여 덧셈을 하도록 한다. 이 때 빼는 수를 보수로 바꾸어 주는 화로가 보수기이다.


오버플로 검출기: 여러 연산을 시행할 때 연산결과를 모두 레지스터에 저장할 수 없는 경우가 생긴다. 이것을 오버 플로우라 하며 연산의 각 단계마다 검출기를 두어 에러 발생체크를 해서 사용자에게 알려준다.


레지스터: 앞서 설명했듯, 어떤 데이터를 일시적으로 기억하는 장치이다. 프로그래머가 관리 가능한 레지스터로는 어큐뮬레이터가 있고, 관리할 수 없는 레지스터는 프로그램 카운터와 명령 레지스터 등이 있다.


논리 연산은 문자의 여러가지를 처리하는 것으로 데이터를 수치로 취급하지 않고 비트 또는 바이트 단위로 취급한다. 이와 같은 단위로 데이터를 취급하는 명령을 논리명령이라고 한다.


●논리조작: 스토어, 로드, 비교, 분기와 같은 기능들이 있다. 스토어는 동일한 정보를 시간이 지난 후 다시 얻기위해 기억장치로 옮기는 것을 말한다. 로드는 주기억 및 외부 기억 장치로부터 컴퓨터의 내부 연산 장치로 정보를 옮기는 것을 말한다. 또 비교는 조건에 따라 두개의 데이터에 대소 판별하는 것을 말하고, 마지막으로 분기는 명령의 실행 순서를 변경하는 것을 의미한다. 조건의 유무에 따라 조건 분기와 무조건 분기로 나뉜다.


●자리 이동: 산술 연산의 경우에 소수점의 위치를 다른것과 맞추거나 소수점 이하의 값을 없애버리는 기능을 말한다. 그런데 2진수에서 소수점 위치를 n만큼 움직이면 원래의 수를 2의 n승 하는 결과가 된다.


●편집:  10진수를 다른 비트로 나타내거나 출력을 위한 유효숫자 왼쪽의 0을 지우거나 소수점이나 콤마를 삽입하는 기능을 말한다.


●변환: 2진수를 10진수로 10진수를 2진수로 변환하거나 코드를 서로 변환하는 기능을 말한다. 

문제 설명

실수 한 개를 입력받는다.

입력 받은 실수를 정수 부분과 실수 부분으로 나누어 따로 출력한다.

입력

실수 한 개가 입력된다.
(단, 입력 값은 절댓값이 정수부가 100,000을 넘지 않으며, 소수점 이하는 0으로 시작하지 않으며, 6자리이하이다.)

출력

첫 번째 줄에 정수 부분을,

두 번째 줄에 실수 부분을 입력된 자릿수만큼 그대로 출력한다.

입력 예시

1.414213

출력 예시

1 414213

도움말

int a, b;

scanf("%d.%d", &a, &b); 

의 방법도 사용할 수 있다.