크기가 8인 배열에 입력되어 있는 이진수 8자리에 대하여 2의 보수를 구하여 출력하라.
(단, 부호비트는 없는 것으로 간주)
실행 결과
1회
2회
3회
package jungbo;
import java.util.Random;
public class P119ComplementOf2 {
public static void main(String[] args) {
int bin[] = new int[8];//이진수 8자리를 받을 배열
int i;//반복문 돌리기 위한 변수
for(i=0;i<8;i++){
Random random = new Random();
bin[i] = random.nextInt(2);
}//8비트 2진수 난수 발생
if(bin[0]+bin[1]+bin[2]+bin[3]+bin[4]+bin[5]+bin[6]==0){
bin[7]=1;
}//00000000이 나오는 것을 방지
int bo1[] = new int[8];//1의 보수를 받을 배열
int bo2[] = new int[8];//2의 보수를 받을 배열
int J=0;//배열의 자리수
int N=7;//배열의 끝자리
int C=1;//자리올림수(carry)
for(J=0;J<=N;J++){//1의 보수 구하기
bo1[J]=1-bin[J];
}
J=N; //가장 낮은 자리수부터 구해 올라가기 위해
while(J>=0){ //2의 보수 구하기
bo2[J]=1;//일단 1을 넣어놓고
if(bo1[J]==C){//1의 보수가 1이라면
bo2[J]=0;//2가 되므로 0으로 내려준후
}
C=bo1[J]*C;//자리올림수를 발생시켜준다. (1의 보수가 0일 경우 당연히 0)
J--;
}
//출력
for(i=0;i<8;i++){
System.out.print(bin[i]);
}
System.out.println(" Random 발생한 2진수");
for(i=0;i<8;i++){
System.out.print(bo2[i]);
}
System.out.println(" 2의 보수");
}
}
'JAVA > 알고리즘 예제' 카테고리의 다른 글
[JAVA] 소수로 삼각형 찍기 (0) | 2016.09.14 |
---|---|
[JAVA] 7에 가장 가까운 정수 찾기 (0) | 2016.09.14 |
[JAVA] 5자리 2진수의 보수 구하기 (0) | 2016.09.14 |
[JAVA] 최대공약수, 최소공배수 계산 문제 (0) | 2016.09.14 |
[JAVA] 약수(Divisor) 관련 문제 (1) | 2016.09.14 |