2의 보수법은 해당 숫자 양수에 해당하는 2진수와 음수에 해당하는 2진수를 더하면 크기가 초과돼서 사라지고 나머지는 0이 되는 수이다. 

# 2진수 부호있는10진수
1 000 0
2 001 1
3 010 2
4 011 3
5 100 -4
6 101 -3
7 110 -2
8 111 -1

보면 양수1과 음수 -1의 2진수로의 표현은 각각 001과 111인데 이것을 더하면

(1) 000이 되고 (1)은 자릿수를 초과하는 값으로써 버려진다.

좀 더 간단하게 쓰면 2의 보수는 양수의 0인 자리에 1을 넣고 1인 자리에 0을 넣은 값에서 +1하면된다.

 

3을 2진수로 011이라는 사실만 알 때 

-3은 100+001=101이란 사실을 알 수 있다.

 

반대로 -2가 2진수로 110이라는 사실을 알 때

양수 -2는 001+001=010이라는 사실을 알 수 있다.

'JAVA 02강 변수(Variable) > 진법' 카테고리의 다른 글

실수의 진법변환  (0) 2021.07.11
정수의 진법 변환  (0) 2021.07.11
8진법과 16진법(octal base hexadecimal)  (0) 2021.07.11
비트(bit)와 바이트(byte)  (0) 2021.07.11
10진법과 2진법(decimal, binary)  (0) 2021.07.11

2진수를 10진수로 변환하는 방법

각 자릿수에 0.5ⁿ을 곱하고 더해준다.

 

0.101(2진수)의 경우

0./1/0/1

0.5X1+0.5 ²X0+0.5 ³X1 = 0.5+0+0.125

0.625(10진수)

 

10진수를 2진수로 변환하는 방법

0.5 0.625 나머지
0.5 0.125 1
0.5 0.125 0
    1
    0.101

0.625(10진수)는 0.101(2진수)이다.

 

 

10진수를 n진수로 나누려면 해당 진수로 나누고 나머지 값을 앞에 적는 것을 더 이상 나눌 수 없을 때까지 반복한 다음 마지막 몫과 나머지를 아래부터 위로 순서대로 적으면 된다.

 

 

2 46 나머지
2 23 0
2 11 1
2 5 1
  2 1
  1 0

46(10진수) > 101110(2진수)

이런식으로 변환이 가능하다.

 

 

8진수는 2진수 3자리를. 16진수는 2진수 4자리를 각각 한자리로 표현할 수 있기 때문에 자릿수가 짧아져서 알아보기 쉬워지고 서로 간의 변환 방법 또한 매우 간단하다.

 

2진수를 25를 8진수로 바꾸려면 2진수를 3자리 단위로 나눈 뒤 그 3자리마다의 2진수값을 구해서 적으면 된다.

01101 > 001/101 > 1/5 > 15

 

001은 2진수로 2²X0+2X0+1X1 = 1

101은 2진수로 2²X1+2X0+1X1 = 5

16진수의 경우 2진수를 4자리 단위로 나눈 뒤 그 4자리마다 2 진수 값을 구해서 적으면 된다.

'JAVA 02강 변수(Variable) > 진법' 카테고리의 다른 글

음수의 2진 표현 - 2의 보수법  (0) 2021.07.11
실수의 진법변환  (0) 2021.07.11
정수의 진법 변환  (0) 2021.07.11
비트(bit)와 바이트(byte)  (0) 2021.07.11
10진법과 2진법(decimal, binary)  (0) 2021.07.11

한 자리의 2진수를 '비트(bit, binary digit)라고 하며, 1비트는 컴퓨터가 값을 저장할 수 있는 최소 단위이다.

보통 비트 8개를 묶어서 바이트(byte)라는 단위로 정의해서 데이터의 기본 단위로 사용한다.

이 외에도 워드(word)라는 단위가 있는데, 워드(word)는 CPU가 한 번에 처리할 수 있는 데이터의 크기를 의미한다.

 

n비트로 표현할 수 있는 10진수

값의 개수 : 2ⁿ

값의 범위 : 0~2ⁿ-1

10진법은 일상생활에서 일반적으로 쓰는 숫자이며, 2진법은 컴퓨터가 쓰는 숫자이다.

사람은 10개의 손가락을 가지고 있고, 컴퓨터는 켜짐 꺼짐 두 가지 상태를 가지고 있다.

 

int age = 25; // 변수 age에 25를 저장

 

25(10진수) > 11001(2진수)

 

2진법은 0과 1로만 데이터를 표현하기 때문에 10진법에 비해 많은 자릿수를 필요로 한다.

2진수 10진수
0 0
1 1
10 2
11 3
100 4
101 5
110 6
111 7
1000 8

 

'JAVA 02강 변수(Variable) > 진법' 카테고리의 다른 글

음수의 2진 표현 - 2의 보수법  (0) 2021.07.11
실수의 진법변환  (0) 2021.07.11
정수의 진법 변환  (0) 2021.07.11
8진법과 16진법(octal base hexadecimal)  (0) 2021.07.11
비트(bit)와 바이트(byte)  (0) 2021.07.11

화면에서 출력할 뿐 아니라 입력도 받을 수 있다.

import java. utill.*;(Scanner클래스를 사용하기 위해 추가)

Scanner scanner = new Scanner (System.in); // Scanner 클래스의 객체를 생성

String input = scanner.nextLine(); // 입력받은 내용을 input에 저장
int num = Integer.parseInt(input); // 입력받은 내용을 int 타입으로 전환

int num = scanner.nextInt(); // 정수를 입력받아서 변수 num에 저장

 

public class PrintfEx2 {
	public static void main(String[] args) {
		String url = "www.codechobo.com";
		
		float f1 = .10f;	// 0.10, 1.0e-1
		float f2 = 1e1f;	// 10.0, 1.0e1, 1.0e+1
		float f3 = 3.14e3f; // 원주율
		double d = 1.23456789;
		
		System.out.printf("f1=%f, %e, %g%n", f1, f1, f1);
		System.out.printf("f2=%f, %e, %g%n", f2, f2, f2);
		System.out.printf("f3=%f, %e, %g%n", f3, f3, f3);

		System.out.printf("d=%f%n", d);
		System.out.printf("d=%14.10f%n", d);

		System.out.printf("[12345678901234567890]%n");
		System.out.printf("[%s]%n)", url);
		System.out.printf("[%20s]%n", url);
		System.out.printf("[%-20s]%n", url);
		System.out.printf("[%.8s]%n", url);
	}

}

 

f1=0.100000, 1.000000e-01, 0.100000
f2=10.000000, 1.000000e+01, 10.0000
f3=3140.000000, 3.140000e+03, 3140.00
d=1.234568
d=  1.2345678900
[12345678901234567890]
[www.codechobo.com]
)[   www.codechobo.com]
[www.codechobo.com   ]
[www.code]

실행결과

 

실수형 값의 출력에 사용되는 지시자는 '% f', '% e', '% g'가 있으며 '% e'는 지수 형태로 출력할 때, '% g'는 값을 간략하게 표현할 때 쓰인다.'% f'는 기본적으로 소수점 아래 6자리까지만 출력하기 때문에 소수점 아래 7자리에서 반올림한다.

화면에 출력할 때 printlon()을 써왔는데 변수의 값을 그대로 출력해서 값을 변환하지 않고는 다른 형식으로 출력할 수 없다.

이럴 때 printf를 쓰면 출력할 수 있다.

printf()는 지시자(specifier)를 통해 변수의 값을 여러가지 형식으로 변환하여 출력하는 기능을 가지고 있다.

 

 

+ Recent posts