IT/JAVA

[JAVA] 리터럴 , 기본형 변수 , 형변환 , constant , 연산자 & 진법

이든Kim 2018. 3. 22. 16:47

 

 

 

리터럴( Literal )

 

 

  • 변수의 초기값을 코드에서 직접 입력하는 경우, 직접 입력된 값을 리터럴이라고 한다.
  • 리터럴의 종류 > 정수 리터럴 , 실수 리터럴 , 문자 리터럴,논리 리터럴
  • 리터럴은 상수와 같은 의미지만 프로그램에서 '상수(constant)'를 값을 한 번 저장하면 변경
  • 할 수 없는 변수로 정의 하기 때문에 이와 구분하기위해 ' 리터럴'이라는 용어를 사용한다. 

 

1. 정수리터럴

 - 소수점이 없는 리터럴은 10진수로 간주한다.

 - 0으로 시작되는 리터럴은 8 진수로 간주한다.

 - 0x 또는 0X로 시작하고 0~9 숫자나 A,B,C,D,E,F 또는 a,b,c,d,e,f 로 구성된 리터럴은 16진수

 - 정수 리터럴을 저장할 수 있는 타입은 byte,char,short,int,long

 

2. 실수 리터럴

 - 소수점이 있는 리터럴은 10진수 실수로 간주

 - 대문자 E또는 소문자e가 있는 리터럴은 10진수 지수와 가수로 간주한다.

 - float,double

 

3)문자리터럴

 - 작은 따옴표 ( ' )로 묶는 텍스트는 하나의 문자 리터럴로 간주

 - 역 슬레쉬 (\) 가 붙은 문자 리터럴은 이스케이프(문자라고한다.)

\t 

 수평 탭 

\n

 줄 바꿈 

\r 

 리턴 

\" 

 큰따옴표 

\' 

 작은따옴표 

\\ 

 \ 

\u16진수 

 16진수에 해당하는 유니코드 

문자 리터러을 저장 할 수 있는 타입은 char 이다

 

3. 문자열 리터럴

- 큰 따옴표 (")로 묶은 텍스트는 문자열 리터럴로 간주

- 큰 따옴표 안에 텍스트가 없어도 문자열로 간주한다.

- 문자열 리터럴 내부에서도 이스케이프 문자를 사용 할수 있다.

 

4. 논리 리터럴

 - true와 false는 논리 리터럴로 간주한다.

 - 논리 리터럴을 저장할 수 있는 타입은 boolean

 


 

 

데이터 형 (Data Type )

 

  •  값을 저장하기 위해 이름과 크기를 지정하여 예약해놓은 것
  •  변수를 선언할 때 사용
  •  종류 :  기본데이터 형 ( 기본 타입 ) , 참조형 데이터형(참조 타입)이 제공된다.
  •  기본 타입 : 선언된 변수자체에 값이 저장되는 데이터형
  •  참조 타입 : 값은 메모리의 다른곳에 저장되고 그 주소를 저장하는 데이터 형
  •  참조 형에는 class,String,Array가 있으며 다음에 다루도록 하겠습니다.

     

    1.기본형 데이터형  / 기본 타입 / 기본형  

     - 선언된 변수자체에 값이 저장되는 데이터형

     - 상수를 저장

     - char을 문자로 치나 정수로 치는가 두가지로 나누어서 구분한다.

     

    * char 문자로 취급하는경우

     

    값의 종류 

    데이터형 

    크기(byte) 

    범위(range) 

    사용예 

     정수

     byte

     

     short

     

     int

     

     long

     

    1

     

    2

     

    4

     

    8

     

    -128~+127

     

    -32,768~+32,767

     

    -2,147,483,648~+2,147,483,647

     

    -(2의 63승) ~ +(2의 63승 -1)

     byte b =10;

     

     short s =20;

     

     int i =30;

     

     long l = 40;

     문자

      char

     (character라고

    읽는다.)

    2

    작음 따음표(')로 묶인 영문자,숫자,한글(1자),한자(1자)

     char c = 'A';

     char c = '0';

     char c = '가'

     실수

     

     float

     

     double

     

     

    4

     

    8

     

    소수 이하 6자리 유효연산

     

    소수이하 15자리 유효연산

    float f= 0.123F

    double d= 0.123;

     논리

     boolean

    1

    true/false 만 저장

    boolean bl = true;

    boolean bl =false;

     

    * char를 정수로 취급하는 경우

    정수 

    byte 

    1byte 

     

    char 

    2byte 

     

    short 

    2byte 

     

    int 

    4bye 

     

    long 

    8byte 

    실수 

    float 

    4byte 

     

    double 

    8byte 

    논리 

    boolean 

    1byte 

     

     

     

    필자는 char를 정수로 취급하여 기제 하겠습니다.

     

     

    2. 정수타입

     1) byte 타입

     - 색상정보 및 파일 또는 이미지등의 이진(binary)데이터를 처리 할때 사용

     - 표현값의 범위 -128~127이다. 양수가 127인 이유는 0이 포함되기때문

     

     2) char 타입

     - 자바는 모든 문자를 유니코드( www.unicode.org 참조) 로 처리한다.

     - char가 표현 할 수 있는 범위는 0~65535(2의 16승 )이다

     - 음수는 처리 될 수 없다.

     - 표현 값 = 아스키코드  > A = 65 , a = 97 , 0 = 48

     

     3) short 타입

     - 2byte로 표현되는 정수 값을 저장할 수 있는 데이터 타입이다.

     - 표현값의 범위는 -32,768~+32,767

     - c언어와의 호환을 위해 사용되며 비교적 자바에서는 잘 사용되지 않는 타입

     

     4) int 타입

     - 4byte로 표현되며 정수값을 저장 할 수 있는 데이터 타입

     - 값의 범위는 -2,147,483,648~2,147,483,647이다

     - 8 진수를 표현할 때 숫자앞에 0을 붙이고 16진수를 표현할 때 0x를 붙이면된다.

     

     5) long 타입

     - 8byte(64bit)로 표현되는 정수값을 저장할 수 있는 데이터 타입

     - 표현 범위는 -(2의 63승) ~ +(2의 63승 -1)

     - int 타입의 저장 범위를 넘어서는 큰 정수는 반드시 소문자 'l'이나 대문자'L'을 붙여야한다.

       그렇지 않으면 컴파일 에러가 나며 , 소문자 엘(l)은 숫자 1과 혼동하기 쉬움으로 대문자L를

       사용한다.

        ex) long var=10000000000000L

     3. 실수 타입

     - 실수 타입은 소수점이 있는 실수 데이터를 저장할 수 있는 타입으로,

     - 메모리 사용 크기에 따라 float과 double을 사용 할수 있다.

     - 만약 정수 리터럴에 10의 지수를 나타내는 E또는 e를 포함하고 있으면 정수 리터럴이 아닌

       실수 리터럴임으로 실수 타입에 저장 해야한다..

    1) float 타입

     - float (4byte ,32bit ) =  부호(1bit) + 지수(8bit) + 가수(23bit) = 32bit = 4byte

     - 소수 이하 6자리 유효연산

     - 실수 리터럴을 float 타입 변수에 저장하려면 리터럴 뒤에 'f'나 'F'를 붙여야한다.

       ex) float var = 3.22F;

    2) double 타입

     - double(8byte,64bit) = 부호(1bit) + 지수(11bit) + 가수(52bit) = 64bit = 8byte

     - 소수이하 15자리 유효연산

     

    *논리타입

     - boolean 타입은 1byte(8bit)로 표현되는 논리값(true/false)을 저장 할 수 있는 타입

     

     

     

     

     


     

    형변환

     

    1. 자동형변환( promotion )

     - 프로그램 실행시 JVM이 알맞게 메모리를 변경해주는 것

     - 변수에 값을 할당 할 때 작동; 

     - 연산 될 때 동작하게됨

     - int의 하위 데이터형은 연산적 결과를 int로 로 만든다.

     

     

     

    2. 강제 형변환 ( casting )

     - 데이터형을 개발자가 일시적으로 변경하는 것

     - 단점 : 값 손실이 발생할 수 있다.

     - 기본형 데이터 , 참조형 데이터형 모두 사용 가능

     - 기본형 > 참조형 , 참조형 >기본형으로 형변환이 되지 않는다.

     - boolean 은 형변환이 되지 않는다.

     - 문법 : (변환할 형)리터럴 , (변환할 형 ) 변수

     

     


     

     

    constant 상수

    •   변수를 고정상수처럼 사용 할 때 사용할 때 사용
    •   한번정해진 값은 바뀔수가 없다 / 선언 할때만 값 할당 가능
    •   프로그램내에 기준값을 저장하고 사용할 때 사용하면 좋다.
    •   class의 field에 선언하고 어디에서든 사용 할 수 있다.
    •   상수는 변수와 다르게 주로 전부 대문자로 작성한다.
    •    ( 아니면 전부 소문자로 사용하기도 한다. 단어구분은 _ 로 한다.)

    문법)

     

    class 클래스명{

     

    public static final 데이터형 상수명 = 값;

     

     

     

     

     

    1. Wrapper class 

     - 기본형 데이터를 객체로 만들어서 사용할 때 필요한 클래스들

     - 기본형 데이터를 값만 대입받고 어떤행동을 하지 못한다.

     - 기본형은 오로지 연산,출력,다른변수에 할당하는 것만 할수 있다.

     - 이와 같이 다른 기능도 추가적으로 할수 있게 wrapper class가 존재한다.

     - java.lang 이라는 패키지에서 제공한다.

     - 기본형데이터와 이름이 같지만 클래스임으로 첫글자가 대문자

     

      ex ) byte -> Byte

     int -> Interger

     int 는기본타입이지만 Integer 라는 클래스가 존재

     

     

     

     


     

    연산자 & 진법

    • 연산하기 위해 예약해 놓은 부호들

     

     

    1.연산자 우선순위 :                최단산쉬관리삼대콤마

    먼저 연산<---------------------->나중에 연산

     

    [최]우선

     (  ) 괄호 

    [단]항  

     ~ , ! , + , -, ++ , --    

    [산]

     + , - , * , / , %

    [쉬]프트

     << , >> , >>>

    [관]

     > , < , >= , <= , == , !=

    [리]

     비트논리 : & ,! , | , ^

     인발논리 : && , ||

    [삼]

     ? :

    [대]

     산술대입  =. += , -= , *= , /=, %=

     쉬프트대입 <<= , >>=, >>>=

     비트논리대입 &=, != , ^= 

    [콤마]

     , 콤마

     

     1) 단항 (Unary ) 연산에 필요한 항이 하나인 연산자,

    •  ~(tilde) : 1의 보수 연산자 ( 이진수로 변환해야하는 연산자 )

    부호가 바뀌고 값도 변경된다

         ~ 양수 : 부호가 변경되고 1증가

         ~ 음수 : 부호가 변경되고 1감소

    ~5 = 5는 ( 0000 01010) 인데 ~5는 ( 1111 1010 ) = -6

    ~-3 = -3은 (1111 1101) 인데 2으로 변환 (0000 0011) = 2로

     

    • !( not ) : true -> false , false -> true 

    !(3>2) 는 FALSE가 나온다.

    • + : 형식적 제공
    • -  : 2의 보수연산

               부호만 변경되고 값은 그대로 유지하는 연산

     

     

    2. 진수

     - 서로 다른 모양의 숫자로 모든 수를 표현하는 법

     

     16 진수( Hex / 헥사 )

     0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F (16개)

     10 진수 

     0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ( 10개 )

     8 진수 ( Octa / 옥타 )  

     0, 1, 2, 3, 4, 5, 6, 7 ( 8개 )

     2 진수 ( Binary /바이너리 ) 

     0, 1 ( 2개 )

     

     - java 에서 표현 할 수 있는 진수는 16진수, 10진수, 8진수

     - 맨 앞에 0이 붙으면 8진 >  int a = 04 ( 8진수의 4)

     - 맨 앞에 0x(혹은 0X) 가 붙으면 16진수    int a = 0x10 ( 진수의 16 )

    - 어떠한 진수를 리터럴로 입력하든 출력은 10진수로 나온다.

     

    소스코드)

    출력)

     

     

     

    하지만 아래의 이미지에 나오는 것처럼

     Integer class에 있는 메소드를 사용하면 해당 진수에 따라 출력이된다.

     

    참조 : https://docs.oracle.com/javase/8/docs/api/index.html

     

    소스코드)

     

    결과)

    3. 8진수를 2진수로 바꾸는 방법

     - 숫자하나를 4 2 1 첨자를 사용하여 2진수로 만든다.

     ex ) int a = 013

     

    1 일 경우

    1의 2진표현법

    0

    3 일 경우

     4

    3의 2진표현법

     0

    1의 결과 001 과 3의 결과 011 을 붙인다. = > 001 011

     

    4. 16 진수를 2진수로 바꾸는 법

     - 숫자하나를 8 4 2 1 첨자를 사용하여 2진수로 만든다.

    ex int a = 0x1A

     

     1

     8

    1의 2진표현 

     A의 경우

    (10진수로 변홤하면 10)

     8

    A의 2진표현

     1

    1와 결과 0001 와 A의 결과 1010을 붙인다..  0001 1010

     

    5. 보수

     양수의 보수는 절대값에서 1을 더해준 음수 값이다..

     1의 보수는 -2 

     2의 보수는 -3