자바 도전기-3

김치전사·2021년 12월 29일
0

자바도전기

목록 보기
3/17

지금은 자료 기본형(primitive type)에 대해 공부한다

첫번째는 논리형-boolean이다

논리형에는 'boolean' 한가지 밖에 없다. boolean형 변수에는 true와 false 중 하나를 저장할 수 있으며 기본값(default)은 false이다
boolean형은 true와 false, 두가지의 값만을 표현하면 되므로 1bit만으로도 충분하지만, 자바에서는 데이터를 다루는 최소단위가 byte이기 때문에, boolean의 크기가 1byte이다.

boolean power=true;
boolean checked=False;//에러. 대소문자가 구분됨.

자바에서는대소문자가 구별되기 떄문에 TRUE와 true는 다른 것으로 간주된다는 것에 주의하자

두번째는 문자형-char이다

문자형 역시 'char' 한 가지 자료형밖에 없다. 문자를 저장하기 위한 변수를 선언할 때 사용되며, char타입의 변수는 단 하나의 문자만을 저장할 수 있다.

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

변수에 '문자'가 저장되는 것 같지만, 사실은 문자가 아닌 '유니코드(정수)'가 저장된다
문자 리터럴 대신 문자의 유니코드를 직접 저장할 수도 있다

char ch='A';
char ch=65;//문자의 코드를 직접 변수 ch에 저장

어떤 문자의 유니코드를 알고 싶으면, char형 변수에 저장된 값을 정수형(int)으로 변환하면 된다

int code=(int)ch;//ch에 저장된 값을 int타입으로 변환하여 저장한다
public class CharToCode  {
    public static void main(String[] args){
        char ch='A';
        int code=(int)ch;

        System.out.printf("%c=%d(%#X) %n",ch,code,code);

        char hch='가';
        System.out.printf("%c=%d(%#X)%n",hch,(int)hch,(int)hch);
    }
}

문자 '가'의 유니코드는 44032(16진수로 0xAC00)이라는 것을 알 수 없다

char hch=0xAC00;//char hch='가';
char hch='\uAC00';//이렇게도 가능
시퀀스16진수표현되는 문자나 기능
\0\u0000널 문자
\b\u0008백스페이스
\t\u0009탭(수평)
\n\u000A줄바꿈
\v\u000B탭(수직)
\"\u0022큰 따옴표
\'\u0027작은 따옴표
\\\u055C역슬래시
public class SpecialCharEx {
    public static void main(String[] args){
        System.out.println('\'');
        System.out.println("abc\t123\b456");//실행결과는 abc     12456
        System.out.println('\n');
        System.out.println("\"Hello\"");
        System.out.println("c:\\");
    }
}

char타입의 크기는 2byte(16bit)이므로, 16자리의 2진수로 표현할 수 있는 정수의 개수인 65536개의 코드를 사용할 수 있으며, char형 변수는 이 범위 내의 코드 중 하나를 저장할 수 있다.
ㄴshort타입의 크기도 2byte(16bit)도 모두 65536개의 값을 표현할 수 있는데, char타입은 0~65535의 범위를 가지며, 정수형인 short은 절반을 음수표현에 사용하므로 -32768~32767을 범위를 갖는다

인코딩과 디코딩

문자를 코드로 변환하는 것을 문자 인코딩, 그 반대로 코드를 문자로 변환하는 것을 문자 디코딩이라고 하며, 문자를 저장할 때는 인코딩을 해서 숫자로 변환해서 저장하고, 저장된 문자를 읽어올 때는 디코딩을 해서 숫자를 원래의 문자를 되돌려야 한다

부호있는 정수의 오버플로우

public class OverflowEx {
    public static void main(String[] args){
        short sMin=-32768;
        short sMax=32767;
        char cMin=0;
        char cMax=65535;

        System.out.println("sMin  = "+sMin);
        System.out.println("sMin-1= "+(short)(sMin-1));
        System.out.println("sMax  = "+(sMax));
        System.out.println("sMax+1= "+(short)(sMax+1));
        System.out.println("cMin  = "+(int)cMin);
        System.out.println("cMin-1= "+(int)--cMin);
        System.out.println("cMax  = "+(int)(cMax));
        System.out.println("cMax+1  = "+(int)++cMax);
    }
}
sMin-1 -> sMax
sMax+1 -> sMin
cMin-1 -> cMax
cMax+1 -> cMin

실수형-float, double

float타입과 같은 실수형은 '부호(S), 지수(E), 가수(M)', 세 부분으로 이루어져 있다. 실수형에는 표현할 수 있는 값의 범위뿐만 아니라 '정밀도(precision)'도 중요한 요소이다

public class FloatEx1 {
    public static void main(String[] args){
        float f=9.12345678901234567890f;
        float f2=1.234567890234567890f;
        double d=9.12345678901234567890d;

        System.out.printf("        123456789012345678901234%n");
        System.out.printf("f   : %f%n",f);
        System.out.printf("f   : %24.20f%n",f);
        System.out.printf("f2  : %24.20f%n",f2);
        System.out.printf("d   : %24.20f%n",d);
    }
}

%f는 기본적으로 소수점 이하 6자리까지만 출력하므로, 7번째 자리에서 반올림한다

profile
개인공부 블로그입니다. 상업적 용도 X

0개의 댓글