2-1 다음 표의 빈 칸에 8개의 기본형(primitive type)을 알맞은 자리에 넣으시오

  1 byte 2 byte 4 byte 8 byte
논리형 boolean      
문자형   char    
정수형 byte short int long
실수형     float double

 

2-2 주민등록번호를 숫자로 저장하고자 한다. 이 값을 저장하기 위해서는 어떤 자료형(data type)을 선택해야 할까? regNo라는 이름의 변수를 선언하고 자신의 주민등록번호로 초기화 하는 한 줄의 코드를 적으시오.

Long regNo = 6807211072338L;

 

2-3 다음의 문장에서 리터럴, 변수, 상수, 키워드를 적으시오.

int i = 100;
long l =100L;
final float PI = 3.14f;
- 리터럴 : 100, 100L, 3.14f
- 변수 : i,l
- 키워드 : int, long, final, float
- 상수 : PI

 

2-4 다음 중 기본형(primitive type)이 아닌 것은? (b)
a. int
b. Byte
c. double
d. boolean

 

2-5 다음 문장들의 출력결과를 적으세요. 오류가 있는 문장의 경우, 괄호 안에 ‘오류’라고 적으시오.
System.out.println(“1” + “2”) → (12 )
System.out.println(true + “”) → (true )
System.out.println(‘A' + 'B') → (131 )
System.out.println('1' + 2) → (51 )
System.out.println('1' + '2') → (99 )
System.out.println('J' + “ava”) → (Java )
System.out.println(true + null) → (오류 )

 

2-6 다음 중 키워드가 아닌 것은?(모두 고르시오) (b, c, d, e)
a. if
b. True
c. NULL
d. Class
e. System

 

2-7 다음 중 변수의 이름으로 사용할 수 있는 것은? (모두 고르시오)
a. $ystem
b. channel#5 - # 사용불가
c. 7eleven - 숫자로 시작함.
d. If
e. 자바
f. new - 예약어
g. $MAX_NUM
h. hello@com - @ 사용불가

 

2-8 참조형 변수(reference type)와 같은 크기의 기본형(primitive type)은? (모두 고르시오) a, d
a. int
b. long
c. short
d. float
e. double

 

2-9 다음 중 형변환을 생략할 수 있는 것은? (모두 고르시오) d, e
byte b = 10;
char ch = 'A';
int i = 100;
long l = 1000L;

 

2-10 char타입의 변수에 저장될 수 있는 정수 값의 범위는? (10진수로 적으시오)
0~65535

 

2-11 다음중 변수를 잘못 초기화 한 것은? (모두 고르시오) a,b,c,d
a. byte b = 256; 
b. char c = ''; 
c. char answer = 
d. float f = 3.14 
e. double d = 1.4e3f; 

 

2-12 다음 중 main메서드의 선언부로 알맞은 것은? (모두 고르시오) a,b,c,e
a. public static void main(String[] args)
b. public static void main(String args[])
c. public static void main(String[] arv) 
d. public void static main(String[] args) 
e. static public void main(String[] args) 

 

2-13 다음 중 타입과 기본값이 잘못 연결된 것은? (모두 고르시오) c, e, f
a. boolean - false
b. char - '\u0000'
c. float - 0.0 
d. int - 0
e. long - 0 
f. String - "" 

 

 

자동 형 변환

서로 다른 타입 간의 대입이나 연산을 할 때, 형 변환으로 타입을 일치시키는 것이 원칙이다.

하지만, 경우에 따라 편의상의 이유로 형 변환을 생략할 수 있다.

그렇다고 해서 형 변환이 이루어지지 않는 것은 아니고, 컴파일러가 생략된 형 변환을 자동적으로 추가한다.

float f = 1234 // 형변환의 생략. float f = (float)1234;와 같음.

 

그러나 변수가 저장할 수 있는 값의 범위보다 더 큰 값을 저장하려는 경우에 형변환을 생략하면 에러가 발생한다.

byte b = 1000; //에러. byte의 범위(-128~127)를 넘는 값을 저장.

 

 

그러나 명시적 형변환을 해 주었을 경우는 에러가 안 난다.

char ch = (char)1000;

 

또한 연산과정에서도 형 변환이 자동적으로 이루어진다.

 

자동형 변환의 규칙

기존의 값을 최대한 보존할 수 있는 타입으로 자동 형변환한다.
1 byte 2 byte 4 byte 8 byte 4 byte 8 byte
byte short int long float double
    char      

 

char와 short은 둘 다 2 byte의 크기로 크기가 같지만, 범위가 달라서 둘 중 어느 쪽으로 바꿔도 손실이 발생할 수 있으므로 형 변환이 수행될 수 없다.

1. boolean을 제외한 나머지 7개의 기본형은 서로 형변환이 가능하다.
2. 기본형과 참조형은 서로 형변환할 수 없다.
3. 서로 다른 타입의 변수간의 연산은 형변환을 하는 것이 원칙이지만,
   값의 범위가 작은 타입에서 큰 타입으로의 형변환은 생략할 수 있다.

연습문제는 코드 초보 스터디(http://cafe.naver.com/javachobostudy.cafe)에서 PDF 파일로 제공

 

정수형 - byte, short, int, long

정수형에는 모두 4개의 자료형이 있으며, 각 자료형이 저장할 수 있는 값의 범위가 서로 다르다.

byte(자료형) < short < int < long
1(메모리)   2   4   8

기본 자료형(default data type)은 int이다.

 

정수형의 표현 형식과 범위

타입(type) 저장 가능한 범위 크기
bit            byte
byte -128~127(-2⁷~2⁷-1) 8 1
short -32,768~32,767(-2¹⁵~2¹⁵-1) 16 2
int -2,147,483,648~2,147,483,647(-2³¹~2³¹-1. 약 +-20억) 32 4
long -9,223,372,036,854,775,808~9,223,372,036,854,775,807(-2⁶³~2⁶³-1) 64 8

정수형은 연산을 할 때 4byte보다 작은 자료형의 값을 계산할 때는 4byte로 변환하기 때문에 int형으로 저장하는 경우가 많다.

주의할 점은 부호가 있는 정수의 경우 최솟값에서 -1을 하면 최댓값이 되고 최댓값에서 1을 더하면 최솟값이 된다.

 

실수형 - float, double

타입 저장 가능한 값의 범위(양수) 정밀도 크기
float 1.4X10⁻⁴⁵~3.4X10³⁸ 7자리 32 4
double 4.9X10⁻³¹⁴~1.8X10³⁰⁸ 15자리 64 8

이것은 양의 범위만을 적이며 -를 붙이면 음의 범위가 된다. 

 float의 경우 0에서 경우 0에서 +-1.4X10⁻⁴⁵까지 double의 경우 0에서 +-4.9X10⁻³¹⁴까지 값을 표현할 수 없다.

 

실수형에서 최댓값을 넘어선다면 값이 무한대가 되고, 최솟값 이하가 되면 0이 된다.

 

실수의 저장 형식은 세 부분으로 나뉘어서 저장되는데, 부호(Sign), 지수(Exponent), 가수(Mantissa), 모두 세 부분으로 이루어져 있다.

float : 1 + 8 + 23 = 32 (4 byte)
S(1) E (8) M (23)
double : 1 + 11 + 52 = 64 (8 byte)
S(1) E (8) M (23)

이와 같은 표현 형식은 IEEE 754(Institute of Electrical and Electronics Engineers)라는 표준을 따른 것이다.

기호 의미 설명
S 부호(Sign bit) 0이면 양수, 1이면 음수
E 지수(Exponent) 부호가 있는 정수, 지수의 범위는
-127~128(float),-1023~1024(double)
M 가수(Mantissa) 실제값을 저장하는 부분,
10진수로 7자리(float), 15자리 (double)의 정밀도로 저장 가능

부호 (Sign bit)

S는 부호 비트를 의미하며 1 bit이다.

 

지수(Exponent)

E는 지수를 저장하는 부분으로 float의 경우, 8bit의 저장 공강을 갖는다.

-127과 128은 숫자 아님(NaN Not a Number)과 양의 무한대(POSITIVE_INFINITY), 음의 무한대(NEGATIVE-INFINITY)와 같이 특별한 값의 표현을 위해 있으므로 실재 사용한 지수의 범위는 -126~127이다.

 

가수(Mantissa)

'M'은 실제 값인 가수를 저장하는 부분이다.

 

부동소수점에는 오차가 존재한다. 무한소수 같은 경우도 물론이고 계산할 때도 오차가 조금씩 발생한다.

'JAVA 02강 변수(Variable) > 기본형' 카테고리의 다른 글

기본형(primitive type)  (0) 2021.07.11

논리형 - boolean

boolean power = true;

boolean checkes = False; //에러 대소문자가 구분됨 true 또는 false만 가능

boolean은 true와 false 중 하나를 저장할 수 있으며 기본값(default)은 false이다.

논리 구현에 주로 사용된다.

 

문자형 - char

문자형 char역시 한 가지 자료형밖에 없다.

char ch = 'A'; //문자 'A'를 char타입의 변수 ch에 저장

위의 문장은 변수에 '문자'가 저장되는 것 같지만 실재로는 문자의 유니코드 65가 저장되는 것이다.

'A' = 65

'a' = 97

'0' = 48

 

배열의 자료형과 기본값

자료형 기본값
boolean false
char '\u0000'
byte, short, int 0
long 0L
float 0.0f
double 0.0d 또는 0.0
참조형변수 null

 

 

 

인코딩과 디코딩(encoding & decoding)

인코딩은 'A'를 유니코드 65로 변환해서 저장하는 것을 말하고 65를 다시 'A'로 변환하는 것을 디코딩이라고 한다.

암호화를 인코딩, 해석을 디코딩이라고 보면 된다. 만약 웹브라우저의 인코딩 설정이 웹페이지의 인코딩과 다른 경우 글자가 알아볼 수 없게 깨져서 나온다.

https://www.convertstring.com/ko/EncodeDecode/Base64Decode

 

Base64로 디코딩 - 온라인 Base64로 디코더

당신의 Base64로 여기에 텍스트를 디코딩 복사 파일로 디코딩 Base64로 다운로드 :

www.convertstring.com

 

아스키(ASCII)

ASCII는 'American Standard Code for Information Interchange'의 약어로 정보교환을 위한 미국의 표준 코드란 뜻이다.

아스키코드는 255가지이므로 한글을 표현하기에는 부족해서 한글을 표시하기 위해서는 확장 아스키(Extended ASCII)를 사용한다 한글 윈도에서 작성된 문서는 기본적으로 'CP949(확장 완성형)'로 인코딩 되어 저장된다.

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

+ Recent posts