001. 리터럴과 메모리 크기

Cornchip·2022년 9월 14일
1

bitcamp

목록 보기
1/11
post-thumbnail

목차
0. basic
1. 정수
2. 부동소수점
3. 논리값
4. 문자
5. etc



0. basic

< literal : 데이터 표기법 >

ex)
6  = 0b0110 (=0B0110) (2진수) //b:binary
10 = 012 (8진수) //0:octa
18 = 0x12 (= 0X12) (16진수)
  • data type (in java)
    = 자바언어에서 기본으로 제공하는 데이터타입
    = primitive data type
    = 자바 원시 데이터타입
    = 자바 기본 데이터타입


1. 정수(Integer)

1) 데이터 타입

type명메모리크기
byte1byte
short2byte
int4byte
long8byte

2) 정수를 2진수로 표현하는 다양한 방법

  1. Signed-Magnitude
    • 부호가 1bit, magnitude(절대값)이 나머지 bit

      부동소수점을 2진수로 바꾸는 과정에서 가수부를 표현할때 사용한다.

  2. 1의 보수 거의 쓰지 않는다

    +4 = 0100
    -4 = 0100 에 대한 1의 보수
    보수 (그 수가 되기 위해 보충해줘야 하는 수) 를 취해서 1011이 -4가 된다.
    overflow 수는 버린다

  3. 2의 보수
    자바에서 정수를 2진수로 바꿀때 사용하는 규칙!!
    대부분의 프로그래밍 언어가 이 규칙 사용

    +4 = 0100
    -4 : 0100 에 대한 1의 보수를 해서 1011
    위에 다시 1을 더해서 1100이 -4가 된다.

  4. Excess -k
    초과하다 bias(여분으로 초과하는 값)
    부동소수점을 2진수로 바꾸는 과정에서 지수부를 표현할 때 사용

    ex1)
    +4 : 4 + 128 = 132 >> 132를 2진수로 >> 10000100
    -4 : -4 + 128 = 124 >> 124를 2진수로 >> 01111100

    ex2)
    k값은 2^(비트수-1)-1 = 2^(4-1)-1 = 8-1 = 7 (4bit메모리 기준)
    따라서
    +4 >> 4+7 = 11 >> 1011
    -4 >> -4+7 = 3 >> 0011

3) 메모리크기와 값의 범위

  • 메모리크기

    • 100 :: 4 byte
    • 2진수 :: 01100100 (8bit)

    • 000...0_01100100 (0이 24개앞에 있고 01100100)
    • 16진수 :: 0x00_00_00_64

    • 100L :: 8 byte
    • 16진수 :: 0x00_00_00_00_00_00_00_64
  • 값의 범위

    • 4 byte 정수 리터럴 :: 약 -21억 ~ 21억
    • 8 byte 정수 리터럴 :: 약 -900경 ~ 900경


2. 부동소수점(Floating point)

1) 데이터 타입

type명메모리크기
float4byte
double8byte

2) 부동소수점을 2진수로 표현하는 방법

IEEE-754 규칙

12.375
12 --> 1100
0.375 --> 0.375*2 = 0.75 --> **0**
          0.75 *2 = 1.5  --> **1**
          0.5  *2 = 1.0  --> **1**
      --> **0.011**

12.375 = 1100.011 = 1.100011 * 2^3
- 소수점의 왼쪽은 무조건 1이므로 버린다.
- 부호비트 1비트 + : 0, - : 1
- 지수(exponent)부 8비트 : Excess-k 규칙에 따라 2진수화 시킨다.
- 가수(mantissa)부 23비트 --> sign-magnitude 규칙에 따라 2진수로바꾼다.

  • 2진수와 16진수의 관계
    • (2진수) 4bit가 모이면 16진수로 바꿔 쓸 수 있다.
  • 고정소수점과 부동소수점의 표기차이
    • 고정소수점 : 3.14
    • 부동소수점 : 31.4^10^-1 = 31.4E-1 = 31.4e-1

3) 메모리크기와 값의 범위

  • 메모리크기

    • 12.375 : 8 byte = double
    • 2진수 : 0x40_28_c0_00_00_00_00_00

    • 12.375f : 4 byte = float
    • 2진수 : 0x41_46_00_00

      숫자 뒤에 f를 붙여주면 이 수를 4bytefloat로 바꾸라는 명령

  • 값의 범위

    • single precision(단정도) = float 32 bit
      유효자릿수 7자리까지 '거의' 정상적으로 저장
    • double precision(배정도) = double 62 bit
      유효자릿수 15자리까지 '거의' 정상적으로 저장


3. 논리(boolean)

1) 데이터 타입

  • true / false
    대소문자를 구분한다.
type명메모리크기
기본4byte
배열1byte

2) 메모리크기

  • 논리값을 2진수로 표현하는 법

    true : 0x00_00_00_01 (1)
    false : 0x00_00_00_00 (0)
    4byte로 저장한다

  • 단 배열인 경우 :: 1byte만 사용한다.

    true : 0x01
    false : 0x00



4. 문자(character)

1) 데이터 타입

type명메모리크기
char2byte

2) 문자를 2진수로 표현하는 방법

  1. ASCII
  • 미국 표준
  • 7bit로 정의 최대 128자

  1. (ASCII)+유럽문자
  • ISO-8859-1 (ISO-latin-1)
  • 8bit 최대 256자
  • 영어, 숫자, 특수문자 + 유럽문자
  • 국제 표준

  1. EUC-KR (KSC-5601)
    - 2byte
    - 국제 표준

    영어 : ISO-8859-1 : 1byte
    한글 : 2byte
    가 :: 1011 0000 1010 0001 >> B0A1
    각 :: 1011 0000 1010 0010 >> B0A2
    똘 :: 1011 0110 1100 1010 >> B6CA
    똠 :: x
    똥 :: 1011 0110 1100 1011 >> B6CB


    최대 65536자, 한글은 2350자, 나머지는 일본어, 중국어, ...

4. 조합형
  • 2byte

  • 기업이 만들었고 국가표준이지만 국제표준은 아님

    1. [초성]
      ㄱ :: 00010
      ㄲ :: 00011
      ㄴ :: 00100
      ...

    2. [중성]
      ㅏ :: 00011
      ㅐ :: 00100
      ㅑ :: 00101
      ...

    3. [종성]
      ㄱ :: 00010
      ㄲ :: 00011
      ㄳ :: 00100
      ...

댄
:: 1 00101 00100 00101
:: 1001 0100 1000 0101
:: 0x9485

5. MS949(CP949)
  • 2byte
  • [EUC-KR] + [약 8천자] 규칙을 추가
  • 11172자 정의
  • 현재 사용중이다.
  • ANSI

  1. Unicode (2byte, 4byte)
  • java는 2바이트 씀 :: = UTF-16
    A :: 0041
    B :: 0042
    가 :: AC00
    각 :: AC01
    ...

    한글11172자 + 옛한글, ...

A >>BE>> 0041 >>LE>> 4100
각 >>BE>> AC01 >>LE>> 01AC

영어권에서는 메모리를 2배로 많이 써서 문제를 제기했다.


7. UTF-8
  • 유니코드 변형 규칙

  • 8bit로 표현할 수 있는 문자는 예전처럼 그대로 8bit로 표현하기

  • 그 외 문자는 규칙에 따라 변형하자!

    한글은 2byte 였는데 3byte로 늘어나버렸다.

    가 :: AC00 :: 1010 1100 0000 0000 (UNICODE)
    1110 10~~ 10~~
    1110 1010 1011 0000 1000 0000 (UTF-8)
    E A B 0 8 0
    0xEAB080

그러나 JVM이 문자를 저장할 때는 Unicode를 쓴다.
그러나 국제표준은 UTF-8을 쓴다.
일반적으로 텍스트를 저장할 때는 UTF-8을 쓴다.

3) 메모리크기와 표기법

  • 문자

    • 'A' :: 2byte
    • 2진수로 변환 :: 0x0041
    • '가' :: 0xac00
  • 16진법 표기시에 대소문자를 구분하지 않는다.

    • '\uAC00' = '\uac00' = 가
  • 문자-코드-폰트
    • 문자 >> Unicode >> Arial, 굴림체, 궁서체
    • 'A' >> 0x41 >> A A A
    • '가' >> 0xAC00 >> x 가 가
    • 즉, 폰트 파일에 해당코드의 문자그림이 없으면 출력할 수 없다.


5. etc

문자와 문자열

  • 위에서 알아본 4종류가 java의 primitive data type이다

  • 문자열(string)인 String은 객체(class)이다.

  • 문자열

    • "ABC" : String 클래스에 정의된 대로 그 형식에 맞춰 변환한다.
      (그 객체에서 자체적으로 메모리 크기가 몇 byte인지 정한다.)
  • 문자와 문자열 표기

    • 문자 : 'A' '가'
    • 문자열 : "ABCDE", "가나다" double quotation 사용!
      (single quotation 은 안된다.)
      - "" = 빈 문자열
      - '' = 빈 문자가 아니다 오류다.
      - " " = ' ' = 스페이스 문자
      single quotation은 문자 '하나'만 가능!
      'a'는 문자, "a"는 문자열

  • UTF : Unicode TransForm

  • encoding(~형식화 하라=코드화) <-> decoding(~로 복원하라)

    = 코드화 한걸 풀어라 = codec (=encoding + decoding)

    동영상 압축 방법 : MPEG, H.264, ...VP9 //방법 : algorithm


  • 텍스트 와 바이너리

    • text ::

      .txt, .java, .html, .css, .js, .xml
      문자변환규칙에 따라 저장된 파일
      메모장으로 편집가능

    • binary

      .doc, .hwp, .pdf, .avi, .mp3, .jpg, .gif
      전용 S/W를 통해서만 편집가능

  • 위에서 말한 문자변환규칙 = character set (= 문자집합)


  • 문자와 코드

    CR : Carriage Return
    LF : Line Feed
    합쳐서 CRLF

  • 줄바꿈 코드

    Windows 에서는 CR (1byte), LF(1byte) >>합쳐서>> 0D0A
    Unix 에서는 LF(1byte) :: 0A

profile
cornchip

1개의 댓글

comment-user-thumbnail
2022년 9월 22일

퍼가요옹~~!!!!

답글 달기