부호를 포함하는 8비트 2진수 값을 10진수로 변환하는 알고리즘을 작성하라
<조건>
8비트 2진수 값의 최상위 비트는 부호비트이다.
부호비트가 0일 경우 양수, 1일 경우 음수이다.(단, 음수의 경우 2의 보수로 표현)
실행 결과
1회
2회
3회
package jungbo;
import java.util.Random;
public class P114SignedBinaryToDegree {
public static void main(String[] args) {
int sbin[] = new int[8]; //최상위비트가 부호비트인 8비트 2진수를 받을 배열
Random random = new Random();
int i; // 반복문을 돌리기 위한 변수
for(i=0;i<8;i++){
sbin[i]=random.nextInt(2);
}
int dec=0; //각 자리수의 값을 누적해 10진수로 만든 수를 넣을 변수
int k; //2진수 각 자리의 10진수 값을 만들어 줄 변수. ex)2의 1승 = 2 / 2의 2승 = 4
for(i=1;i<8;i++){ //최상위는 부호비트이므로 1부터 시작
k = (int) Math.pow(2, 7-i); //2의 자릿수 제곱을 k에 대입
dec = dec + (k * sbin[i]); //2진수의 i번째 자리수가 1이라면 k를 dec에 누적
}
if(sbin[0]==1){ //부호비트가 1일 경우
dec = 128 - dec; //128(2의 7승)에서 dec를 빼고
dec = dec * (-1); //마이너스(-)부호를 붙여준다.
}
//출력
for(i=0;i<8;i++){
System.out.print(sbin[i]);
}System.out.print("(2) = " + dec + "(10)");
}
}
'JAVA > 알고리즘 예제' 카테고리의 다른 글
[JAVA] 출장비 지급액 화폐 단위별 매수 계산 문제 (0) | 2016.09.15 |
---|---|
[JAVA] 화폐 단위별 매수 계산 (0) | 2016.09.15 |
[JAVA] 소수로 삼각형 찍기 (0) | 2016.09.14 |
[JAVA] 7에 가장 가까운 정수 찾기 (0) | 2016.09.14 |
[JAVA] 8bit 2진수의 2의 보수 구하기 (0) | 2016.09.14 |