02 변수 - 진법, 기본형, 형변환

Freddie·2022년 3월 30일
0

자바의 정석

목록 보기
6/8

3. 진법

3.1 10진법과 2진법

10진수 25 = 2진수 11001(00000000000000000000000000011001)

3.2 비트와 바이트

비트 (bit): 한자리 2진수, 1비트는 컴퓨터가 값을 저장할 수 있는 최소 단위
바이트 (byte): 8비트
워드 : CPU가 한 번에 처리할 수 있는 데이터의 크기

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

3.2 8진법과 16진법

2진수 → 8진수, 16진수

1 0 1 0 1 0 1 1 0 0 = 2진수
1 / 0 1 0 / 1 0 1 / 1 0 0 = 8진수
1 0 / 1 0 1 0 / 1 1 0 0 = 16진수

10진수 → 2n진수
2진수 → 2로 계속 나눈다 → 아래서 위로 순서대로 나머지 적기
8진수, 16진수도 같은 방법

n진수 → 10진수
각 자리수에 해당 단위 값을 곱해서 모두 더하기
2진수 : 2^0 / 2^1 / ₩2^2
8진수 : 8^0 / 8^1 / 8^2

실수의 진법변환
10진 소수점수 → 2진 소수점수
1.10진 소수에 2를 곱한다
2.1결과의 소수부만 가져다가 다시 2를 곱한다
3.1,2의 과정 결과값이 0이 될때까지 반복한다

위 결과에서 정수부만 윙서 아래로 적고 앞에 0을 붙이면 된다

음수의 2진 표현 - 2의 보수법
most significant bit : 2진수의 제일 왼쪽의 1bit
10진수는 2진수의 msb가 0이면 양수 / 1이면 음수

n의 보수 : 더했을때 n이 되는 수
ex) 3과 7은 '10의 보수의 관계'
2의 보수 = 1의 보수 + 1

음수의 2진 표현을 구하는 방법
음수의 절대값을 2진수로 변환한다
1)에서 구한 2진수의 1을 0으로 0은 1로 바꾼다(1의 보수 구하기)
2)의 결과에 1을 더한다(2의 보수 구하기, 1의보스 + 1)
기본형
논리형 -boolean : true or false값
문자형 - char : 단하나의 문자만 저장 가능(사실은 문자의 유니코드가 저장됨)
*문자의 유니코드를 알고 싶으면 int타입으로 변환하면 된다 int code = (int)변수이름;

16비트로 표현할 수 있는 정수의 개수 : 2^16개(65536개)
short타입의 표현범위 : -2^15~2^15-1
char타입의 표현범위 : 0~ 2^16-1

char ch = 'A'; //저장된 숫자에 해당하는 유니코드 문자를 출력한다
short s = 65; //변수에 저장된 값을 10진수로 해석하여 출력

인코딩과 디코딩
인코딩 : 문자를 코드로 변환
디코딩: 코드를 문자로 변환
아스키(ASCII) : 미국 표준 코드, 128개의 문자 집합을 제공하는 7bit부호
확장 아스키와 한글 : 조합형과 완성형이 있는데 현재는 완성형만 사용한다.
잘 안쓰이는 8822글자를 추가한 '확장 완성형'이 사용, 한글 윈도우에서 사용하는 문자 인코딩
한글 윈도우에서 작성된 문서는 기본적으로 cp 949(확장 완성형)로 인코딩되어 저장

code page, cp : 확장 아스키의256개 문자를 어떤 숫자로 변환할 것인지 적어놓은 문자 코드표이다
유니코드 : 21 bit로 표현 - char타입이 아니라 int타입으로 표현해야함
code point : 유니코드 문자 셋에 순서대로 붙인 일련번호

정수형 - byte, short, int, long == 1 < 2 < 4 < 8
정수형의 표현형식과 범위
s : 부호 비트
n : 타입의 크기
n비트로 표현할 수 있는 정수의 개수 : 2^n개
n비트로 표현할 수 있는 부호 있는 정수의 범위 : -2^n-1 ~ (2^n-1) -1
오버플로우 : 타입이 표현할 수 있는 값의 범위를 넘어서는 것

실수형의 저장 형식
+- M x 2^E

형변환(casting) : 변수 또는 상수의 타입을 다른 타입으로 변환하는 것
형변환 방법 : (타입)피연산자
() : 캐스트연산자, 현변환 연산자

정수형간의 형변환
int 타입(4byte) → byte타입 (1byte) : 큰타입에서 작은 타입
*경우에 따라 값손실이 발생한다

byte타입 (1byte) → int 타입(4byte) :작은 타입에서 큰타입
-나머지 빈 공간은 변환하려는 수가 양수면 0으로, 음수면 1로 채워진다

실수형 간의 형변환
float타입 → double타입
지수(E)는 float 기저 127빼기 → double의 기저 1023 더하기 → 가수(M)float의 23자리를 채우고 빈자리는 0으로

double타입 → float타입
지수(E)는 double의 기저인 1023빼기 → float의 기저인 127더하기 → 가수(M)는 double의 가수 52자리중 23자리만 저장
형변환할때 24번째 자리에서 반올림이 일어날 수 있음
float타입의 범위를넘는 값을 float로 형변환 하면 +-무한대, +- 0이 결과로 나옴

정수형과 실수형 간의 형변환
정수형을 실수형으로 변환
정수를 2진수로 변환 → 정규화를 거쳐 실수의 저장형식으로 저장

실수형을 정수형으로 변환
*정수형의 표현형식으로 실수형의 소수점이하 값은 표현 할 수 없음

자동 형변환
float f = 1234; // 형변환의 생략 float f = (float)1234;와 같음
변수가 저장할 수 있는 값의 크기보다 큰 경우 형변환을 생략하면 에러가 난다
char ch = (char)1000; // 명시적 형변환, 에러가 발생하지 않는다
산술변환 : 형변환을 생략하고 연산을 하게 되면 두 타입중 범위가 넓은 타입으로 형변환되어 타입 일치 후 계산 됨 → 값손실 위험이 적어서

자동형변환의 규칙 : 기존 값을 최대한 보존할 수 있는 타입으로 자동 변환 된다.
1.boolean을 제외한 7개의 기본형은 서로 형변환이 가능하다
2.기본형과 참조형은 서로 형변환이 불가능하다
3.서로 다른 타입의 변수간의 연산은 형변환을 하는 것이 윈칙이지만, 값의 범위가 작은 타입에서 큰 타입으로의 형변환은 생략할 수 있다.

1byte → 2byte → 4byte → 8byte → 4byte → 8byte
byte → short → int → long → float → double
char

profile
그냥 'Freddie'라는 이름이 좋아보였습니다.

0개의 댓글