본문 바로가기

JAVA/알고리즘 예제

[JAVA] 8bit 2진수의 2의 보수 구하기

크기가 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의 보수");

}

}