변수 (ch2)

IT/JAVA / / 2021. 5. 16. 19:42

 

변수에 대한 정의

 

값을 저장할 수 있는 메모리상의 공간을 의미한다

 

1. 선언과 초기화

 

변수를 사용시에는 '변수타입'과 '변수이름'을 짓는것이 필요하다. 그리고 변수 초기화 를 통해 그전에 변수에 무슨값이 있던간에 새롭게 사용할 수 있도록 준비해주는 과정도 있어야한다. ex) int age = 25 와 같은 선언.

 

2. 변수 타입은 primitive type, 상수(constant), literal로 구분된다.

 

primitive type 은 크게 4가지로 나누어지며 논리형, 문자형, 정수형, 실수형이있다.

논리형 : boolean

문자형 : char

정수형 : byte, short, (unsinged/ singned) int, (unsinged/ singned) long

실수형 : float, double

기본형 의 값은 다음과 같다. 크기는 바이트 (*8비트) 이며, 값의 범위는 (signed)일 경우 - 2^(n-1) ~ - 2^(n-1)-1이 된다. 그 이유로는 0이 포함되어 있기에 양수 부분에서는 -1를 해주어 범위를 정하게 된다.

Byte 1 byte -128 ~ 127
Short 2 bytes -32,768 ~ 32,767
Singed int 4 bytes -2^(31) ~ 2^(31)-1
Usigned int 4 bytes 0 ~ 2^(32)-1
Singed long 8 bytes -2^(63) ~ 2^(63)-1
Unsigned long 8 bytes 0 ~ 2^(64)-1
Float 4 bytes single-precision 32-bit
Double 8 bytes double-precision 64-bit
Boolean 1 bit true / false
Char 2 bytes ASCII

 

 

3. 정수형의 저장형식 및 오버플로우

 

정수형은 알다싶이 정수로 저장이 되며 부호가 있는 경우(signed) 와 부호가 없는 (unsigned)경우로 나뉘어진다. 그리고 위 값의 범위 표를 통해 알 수 있다.

타입이 표현할 수 있는 값의 범위를 넘어서는 것을 오버플로우 라고 한다. 즉 1111에 +1을 더하면 10000이 되지만 앞의 1이 표현되지 않고 버려져서 0000이 되는 것이다.

즉 최대값 +1 = 최소값이 되고, 최소값 -1 = 최대값이 표현이 된다.

실수형의 저장형식

부동소수점수는 부호, 지수, 가수 모두 세부분으로 이루어진다.

부호: 양수이면 0, 음수이면 1

지수: 부호있는 정수. 지수의 범위는 -127~128(float), -1023~1024(double)이다.

가수: 실제값을 저장하는 부분 10진수로 7자리(float), 15자리(double)이다.

상수는 변수와 마찬가지로 값을 저장할 수 있는 공간 이지만, 변수와 달리 한번 값을 저장하면 다른값으로 변경할 수 없다.

Const int year = 2014; 와 같이 상수로 한번 지정하면 다른값으로 변경이 불가하다.

literal은 그 자체로 값을 의미하는 것이며 보통 '123'과 같은 숫자이다. 하지만 종류별로 표현법이 다르다.

literal 종류별 표현법 (integer, floating, character, string)

 

Integer Literals

 

long 타입은 L 로 끝나거나 l 로 끝나는 값

그외 나머지 숫자는 int

16진수: 0x 로 시작

2진수: 0b 로 시작

 

Floating-Point Literals

 

float 타입은 F로 끝나거나 f 로 끝나는 값

그 외 나머지는 double (optional, D 혹은 d 로 끝나는 값)

 

Character and String Literals

 

Character

아스키

확장아스키

코드 페이지

유니코드

문자형 종류는 4가지정도가 있다

 

special escape character

\b : 백스페이스

\t : 탭

\n : new line

\f : form feed

\r : 캐리지 리턴

\" : 쌍따옴표

\' : 따옴표

\\ : 역슬래시

 

4. 2진법 사용중 알아두어야 할 보수 구하기 방법.

 

N의 보수란, 'n의 보수'는 두수의 합이 (N) 되게 하는 수 를 말한다. 예를 들어 10진수 4의 10의 보수는 6이고, 10진수 2의 10의 보수는 8이다. 그리고 보수 방법을 통해서 컴퓨터 내부에서 음수를 표현할 수 있게 된다. (signed) int와 같은 표현들.

2의 보수를 만들기 위해서는 먼저 1진수의 보수를 더한뒤 +1을 해주면 바로 2의 보수를 구할 수 있다.

예를 들자면 0101 의 1의 보수는 1010 이고 여기에 +1을 해주면 바로 1011 이 된다. 0101(+5) 이며 1011(-5)로 같은 숫자가 된다는 것이다.

 

5. 캐스팅(형변환)

 

모든 변수와 리터럴에는 타입이 있다. 그렇기 때문에 변수나 리터럴의 연산을 하려면 서로 다른 타입을 일치시켜주어야 한다. 거기에 필요한것이 캐스팅이며 다른 타입으로 바꾸는 것을 캐스팅이라고 한다.

캐스팅에는 묵시적 변환과 명시적 변환으로 구분을 할 수 있다.

 

1) 묵시적 형변환

기본 자료형 간의 변환을 컴파일러가 '알아서' 해주는 것

특별한 문법이 필요하지 않음

int → float 형으로 묵시적 변환시에도 값의 정밀도가 달라질 수 있다 그렇기 때문에 인트형으로 표현이 가능하면 인트만 쓸것. long → double 도 정밀도 손실 있음.

승격 (promotion)은 컴파일러가 자동으로 실수형이나 부동소수형 자료의 이진표현을 확장

double num1 = 3.7;

int num2 = 10;

Sysout.println (num1 + num2); //13.7 출력 //num2 가 double 로 승격됨

 

32비트에서 64 비트 형으로 변환 → 문제 없음

64비트에서 32비트로 형 변환 → 문제 생김 (충분히 작으면 문제 없음)

 

1-1) 자동형변환 규칙

byte → short → int → long → float → double 와 같은 방식으로 값의 범위가 작은 타입에서 큰 타입으로의 형 변환은 캐스팅이 생략될 수 있다.

 

2) 명시적 형 변환

double num1 = 10.9;

double num2 = 52.16;

Sysout.println ("일반 덧셈 결과: " + (num1 + num2));

// 62.16 int result = (int)num1 + (int)num2; Console.WriteLine("명시적 형변환 덧셈 결과: " + result);

// 62 -> 명시적 형변환 사용시

    int num1 = 10 double num2 = 52.16 double result = num1 / (double)num2

// .1917~~~ double

(형병환에 리저트도 double로) 소괄호를 사용해서 변하고자 하는 자료형을 보여준다 그리고 명시적 형 변환이 중요한 이유는 프로그래머의 의도를 보여주기 때문에 필요한것.

728x90
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기