2진수 변환 - Integer.toBinaryString(int i) : 정수를 2진수 문자열로 반환 - %s 사용
소수점 - %14.10f : 전체 14자리 중 소수점 아래 10자리
문자열 - %.8s : 왼쪽 8글자만 출력
Scanner
입력을 받아 처리하는 클래스
Console 클래스는 IDE에서 동작하지 않음 - 입력 받는 방법은 다 똑같다고 함
import java.util.*
Scanner scanner = new Scanner(System.in)
메서드 - nextLine() - nextInt() - nextFloat()
입력받은 문자열 타입 변경 - Integer.parseInt() - Float.parseFloat()
3. 진법
bit / byte
bit : 한 자리의 2진수
byte : 1비트 8개
워드(word)
CPU가 한 번에 처리할 수 있는 데이터 크기
[정수] 10진수 <-> n진수
10진수 -> n진수 - n으로 나눈 나머지 거꾸로 연결
n진수 -> 10진수 - 각 자리수에 대한 n의 지수를 곱해서 더하기
[실수] 10진수 <-> n진수
10진수 -> n진수 - 소수부에 0이 될 때까지 n을 곱하여 나온 정수부를 차례로 연결
n진수 -> 10진수 - 각 자리수에 대한 n의 지수를 곱해서 더하기
2의 보수법
어떤 수의 'n의 보수'는 더했을 때 n이 되는 수를 의미
2의 보수와의 합은 0이 됨
1의 보수 + 1
4. 기본형 (Primitive type)
논리형
기본값은 false
자바에서 데이터를 다루는 최소단위가 byte이므로, boolean 크기가 byte
대소문자 구분 (False != false)
문자형
문자의 유니코드(정수)가 저장되기 때문에, 문자 리터럴 대신 유니코드 직접 저장 가능
특수 문자
\f
form feed, 프린트 출력시 현재 페이지를 마침
\n
new line, 화면 출력시 다음 행 (Unix는 new line만 사용)
\r
carriage return, 행의 처음 커서로 이동
\b
backspace, 이전 문자 하나 지움
\u
Unicode, 유니코드 (ex. char a = '\u0041')
인코딩과 디코딩
인코딩과 디코딩 - 문자 'A'의 유니코드는 65 - 인코딩 : 문자를 코드로 변환 - 디코딩 : 코드를 문자로 변환
웹브라우저의 인코딩 설정과 웹페이지의 인코딩이 다른 경우, 글자가 깨짐
유니코드 - 전 세계의 모든 문자를 하나의 통일된 문자집합으로 표현 - 유니코드 문자 셋 : 유니코드에 포함시키고자하는 문자들의 집합 - 유니코드 인코딩 : 이 문자 셋에 붙인 번호 (UTF-8, UTF-16...) - 자바에선 UTF-16 사용 - UTF-16 : 2byte로 모든 문자가 고정 크기 (다루기 쉬우나, 인터넷 전송속도가 느림) - UTF-8 : 1~4byte의 가변 크기 (다루기 어려우나, 인터넷 전송속도가 빠름) - 두 인코딩 모두 아스키를 그대로 포함
정수형
부호 비트(sign bit)외에 나머지는 값을 표현
JVM의 피연산자 스택이 4byte 단위로 저장 - 4byte보다 작은 자료형(byte, short)를 계산할 때는 4byte로 형변환하여 연산
공간과 성능이 트레이드 오프
오버플로우 - 타입이 표현가능한 값의 범위를 넘는 것
실수형
부호(S), 지수(E), 가수(M)로 이루어짐
±M × 2E
범위를 넘어서면 무한대, NaN과 같은 특별한 키워드로 관리
정밀도 (Precision) - float는 7자리 : a x 10n으로 표현된 7자리를 오차없이 표현 가능 - 무한소수의 존재와 2진수 변환시 무한소수가 되는 등의 문제로 오차 발생 - a x 10n와 같은 형태로 바꾸는 것을 정규화라 함
5. 형변환 (casting)
형변환
서로 다른 타입간의 연산 수행을 하기 전 타입이 일치해야함
타입 변환을 casting이라 함
float -> int일 때 소수부는 버려짐
정수형간 형변환
크기가 작은 형태로 변환할 경우 값손실 발생할 수 있음
크기가 큰 형태로 변환할 경우, 부호 비트에 따라 빈공간이 채워짐
실수형간의 형변환
가수부는 0으로 채워지거나 버려짐(버려질 때는 반올림 발생)
자동 형변환
컴파일러가 생략된 형변환을 자동으로 추가
값손실이 발생할 수 있을 경우 에러 메시지를 보냄
명시적으로 변환할 경우 에러 메시지 없음
연산 과정에서는 표현이 더 넓은 타입으로 형변환 - 이를 산술 변환이라고 함
byte -> short / char -> int -> long -> float -> double - 실수형이 정수형보다 더 큰 표현 범위를 가짐