2장 - 스캐너, 진수

·2022년 11월 29일
0

자바의 정석

목록 보기
3/12
post-thumbnail

Scanner

import java.util.*; // 머.. 구체적인 거시기가 잇겟지

Scanner scanner = new Scanner(System.in); // Scanner 객체를 호출했다

String input = scanner.nextLine(); // Scanner 객체 내부의 nextLine 메소드를 불러왔다
int num = Integer.parseInt(input); // input값을 받아온 뒤 int형으로 변환

nextInt(), nextFloat() 등 바로 변환해주는 메서드가 있지만, 연속적으로 값을 받는데 까다롭대.. 걍 일단은 nextLine()으로 String형으로 입력받은 뒤 적절히 변환시켜주자.

진법

10진법과 2진법

ㅈ댓다 진법이옴 ㄷㄷㄷ.. 수능도 외워서 푸렁ㅆ던 저에게 어째서 이런 시련이
컴터는 0, 1밖에 모른다. 그러므로 컴터에게 적절한 2진법을 인간이 배워보자

10진수의 자리올림과 유사하게 이해했다
10진수는 1 + 9 = 10
9에서 1을 더했을 때 10진수인 10이 완성되고, 자리올림이 발생한다.
2진수는 1 + 1 = 10
머선소리야? 싶겠지만 진짜 10진수의 10이 아니라 2진수 10이다.
위와 동일한 방식으로 1에 1을 더했을 때 2진수인 2가 완성이 되고, 자리올림이 발생했다는걸 표기한거다.

2진수 계산
0 + 0 = 0
0 + 1 = 1
1 + 1 = 10
0 x 0 = 0
0 x 1 = 0
1 x 1 = 1

비트와 바이트

비트(bit)
한 자리의 2진수, 1비트는 컴퓨터가 값을 저장할 수 있는 최소단위

바이트(byte)
8비트, 1비트가 넘 작아서 1비트 8개를 묶어서 바이트를 만들고, 데이터 기본단위로 사용한다.

+) 워드(word)
보통 4바이트 정도로 묶어서 그림에 표기하는듯? CPU가 한 번에 처리할 수 있는 데이터의 크기. 하지만 워드는 CPU 성능에 따라 다르다. 32비트 CPU에서 워드는 32비트고, 64비트 CPU에서의 워드는 64비트다.

이전 게시물에서 썼듯 n비트로 2^n개의 값을 표현할 수 있다.

n비트로 표현할 수 있는 10진수
값의 개수: 2^n
값의 범위: 0 ~ 2^n - 1

8진법과 16진법

ㅈ댓다 진법이 또옴..
인간이 컴터한테 맞춰서 배워본 2진법은 0, 1로만 값을 표현하는데, 단점은 자리수가 너무 길다.. 0, 1로만 찍으려니까 글적 그래서 나온게 8진법, 16진법이다.

8진수는 2진수 3자리
16진수는 2진수 4자리
를 각각 한 자리로 표현할 수 있다!

2진수를 8진수, 16진수로 변환

2진수를 뒤에서부터 각각 3자리, 4자리씩 끊어서 해당하는 8진수, 16진수로 변환하면 된다.
말은 쉽다

위에 쓴 표를 힐끔힐끔 보면서 변환해보자

좀 기운거같은데 기분탓이다
1010101100이라는 엄청 긴 2진수를 8진수, 16진수로 변환하면 짧게 나타낼 수 있다 굿

10진수를 n진수로 변환

산수 시간이다. 해당 진수로 나누고 나머지 값을 옆에 적고 아래에서 위로 적으면 된다. 하하

n진수를 10진수로 변환

반대로 하면 된다
각 자리수에 해당 단위 값을 곱해서 다 더하면 된다. 슬 귀찮다..

실수의 진법 변환

울고싶다.. 아니다 거짓말이다

10진 소수점수를 2진 소수점수로 변환해보자.

  1. 10진 소수에 2를 곱한다
    0.625 * 2 = 1.25

  2. 소수부만 갖다 다시 2를 곱한다
    0.25 * 2 = 0.5

  3. 소수부가 0이 될 때까지 1, 2를 반복한다
    0.5 * 2 = 1.0

  4. 정수부만 위에서 아래로 순서대로 적고, 0.을 앞에 붙인다.
    위의 예시에선
    정수부만 보면 101(2)고 0.을 붙여서
    0.101(2)라는 결과를 얻었다
    0.625(10)은 0.101(2)로 변환을 성공했다~! 그만하자 좀 흑흑

2진 소수점수를 10진 소수점수로 변환해보자

위에 내가 했던 식이 구10이 아니라는걸 보여보자. 앞서 말했듯 각 자릿수에 값을 곱하면 된다

10진수 0.625 다음과 같이 표현할 수 있다.
0.625 = 6 * 10^(-1) + 2 * 10^(-2) + 5 * 10^(-3)

2진수 0.101은 다음과 같이 표현할 수 있다.
0.101 = 1 * 2^(-1) + 0 * 2^(-2) + 1 * 2^(-3)
= 1 * 0.5 + 0 * 0.25 + 1 * 0.125
= 0.625(10)
데박~ 진자엿음 ㅋㅋ..ㅋ 그만해 진짜

음수의 2진 표현 - 2의 보수법

미안하다.. 대충 설명하자면

  1. 해당 음수의 절대값을 2진수로 변환한다.
  2. 2진수의 2의 보수를 구한다.

2가 왜이렇게 많아?
2가 왜이렇게 많아?
가 아니라.. 2의 보수는 1의 보수 + 1이다.
뭔.. 뭔솔?
쉽게 말하면 1의 보수는 0은 1로, 1은 0으로 바꿔준 것이다 거기다 끝에 1만 더해주면 됨 ㅎㅎ
왜냐면.. 왜냐면.. 자바의 정석 54p를 보세요..

profile
어?머지?

0개의 댓글