공부일지

기본 자료형 본문

코딩/C#

기본 자료형

이하택 2023. 10. 24. 13:01

기본 데이터 형식

  • CPU 연산 장치
    • ALU(Arithmetic Logic Unit) : 정수만 처리하는 장치
    • FPU(Floating Point Unit) : 부동 소수점만 처리하는 장치
    • 따라서 CPU에게 데이터 종류에 따라 명령을 내려야 함.
      • CPU는 데이터 타입 판단 능력 없음.
      • 컴파일러가 대리 업무

  • 숫자 데이터 형식
    • 정수형 : 9가지
      • 왤케 많음?
      • 닭 잡는데 소 잡는 칼 쓸 수 없다고, 실제 사용되는 리터럴의 크기에 비해 과한 크기의 메모리 선언은 낭비이기 때문.
      • 추가로 char도 정수형
      • 1 바이트(byte) == 8비트(bit)
        • 바이트는 메모리의 주소나 CPU 처리하는 데이터의 단위.

    • 예제

    • 2진수, 10진수, 16진수 리터럴
      • 2진수 리터럴 : 0b 접두사
        • byte a = 0b1111_0000;
        • 언더바(_)는 자릿수 구분자는 2진수, 10진수, 16진수
      • 16진수 리터럴 : 0x 접두사
        • byte b = 0XF0;

    • 부호
      • 부호 있는 정수 : sbyte, short, int, long
      • 부호 없는 정수 : byte, ushort, uint, ulong
      • 8비트 : 2*2*2*2*2*2*2*2 = 256가지
      • sbyte는 -128~127, byte는 0~255까지로 두 자료형의 표현 범위가 다른 이유?

      • Q. 아래의 sbyte형의 비트는 어떤 값일까?
        • 정답

          A. -1

        • 부호와 절댓값 방식 : 아래와 같이 0에 부호가 붙는 문제를 해결하기 위해 2의 보수법으로 음수 표현

    • 2의 보수법
      1. 특정 양수 값의 비트를 계산.
      1. 해당 값의 각 비트를 변환
      1. 변환된 값에 +1

    • Overflow
      • 이러한 자료형의 범위를 벗어나면 어떻게 될까?
        • 표현 가능한 범위는 여전히 8bit이므로 0으로 돌아간다.
        • 이렇게 자료형의 최댓값을 넘어서 값에 변형이 생기거나 오류가 발생하는 것을 Overflow라 한다.

        • 마찬가지로 최저값보다 작은 데이터를 저장한다면 Underflow가 발생한다.

    • char : 정수 계열임

  • 부동 소수점 형식 (뜰 부 + 움직일 동 : 소수점이 떠다니며 움직인다)
    • 소수점을 이동시키면 고정했을 때보다 넓은 범위의 값을 표현 가능.
    • 이미지 예시
    • 정수형의 대체제로 사용 불가한 이유
      1. 소수점 표현으로 인한 표현 범위의 상대적 크기
      1. 연산 과정이 정수 계열보다 복잡하고 느림.

  • 단일 정밀도 : 넓은 범위의 수에 비해 표현 가능한 수는 7자리.
    • 따라서 나머지 수는 대략적으로 표현해야함 == 한정된 정밀도를 갖고있음.
  • 복수 정밀도 : float에 비해 두 배의 메모리를 사용.
  • 이것들이 부동 소수점 형식의 한계.
  • 더불어 double이 float에 비해 메모리 사용량은 두배를 차지하지만, 데이터 손실이 그만큼 적기 때문에 double사용을 추천.
  • double보다도 데이터 손실이 적길 원하면 demical을 사용하고, 그보다 적길 원한다면 직접 자료형을 작성해야한다.

  • demical타입
    • 29자리 데이터 표현 가능, 16바이트(128비트)
    • 소수 표현 방식 조사 필요

  • 문자형과 문자열 형식
    • 문자열 형식 : string(”어떤 물건이 연속해서 가지런하게 놓여 있는 줄”)
      • 변수에 담는 텍스트의 양에 따라 크기가 달라짐.
    • 여러 줄을 담는 문자열
      • 줄바꿈 문자
        string multiStr = "동해물과 백두산이\n마르고 닳도록";
      • 큰따옴표 세 개
        string multiStr = """
        	동해물과 백두산이
        	마르고 닳도록
        	하느님이 보우하사
        	우리나라 만세
        	""";

  • 논리 형식(Boolean Type)
    • 참 / 거짓
    • 크기 : 1바이트(8비트)
      • bool형식은 1비트 만으로 표현 가능하나, 컴퓨터가 다루는 기본 데이터 단위가 바이트기 때문.

  • Object 형식
    • 어떤 데이터도 다룰 수 있는 데이터 형식
    • (사용자 정의 자료형 포함) 모든 데이터 타입은 자동으로 object 형식 상속
    • 컴파일러는 자식을 부모로 간주할 수 있음.

    • 박싱 / 언박싱으로 서로 다른 데이터 형식의 연산을 처리한다.

  • 박싱과 언박싱
    • 박싱 : 값형식 데이터를 object 형식에 담아 힙에 올리는 것
      object a = 20;
    • 언박싱 : 힙에 올라가 있는 데이터를 object에서 꺼내어 값 형식으로 옮기는 것.
      • 박싱된 값을 꺼내 값 형식 변수에 저장하는 과정

  • 형변환
    • 정수형끼리의 형변환
      • 작은 형식 → 큰 형식 : OK
      • 큰 형식 → 작은 형식
        • 작은 형식에 담을 수 있는 크기의 데이터 : OK
        • 작은 형식에 담을 수 없는 크기의 데이터 : Overflow

    • 부동 소수점 형식 사이 형변환
      • Overflow는 없음, 대신 정밀성에 손상.
      • 소수를 2진수로 메모리에 저장했다가 10진수로 변환한 뒤 다시 2진수로 변환하여 기록
        • 2진수로 표현하는 소수가 온전하지 않다.

    • 부호 있는 정수와 없는 정수 사이 형변환
      int x = -30;
      uint y = (uint)x;

    • 부동 소수점 형식과 정수 형식 사이 형변환
      • 소수점 아래는 버림
      • 반올림도 없음.

    • 문자열과 숫자 사이의 형변환
      • Parse()
        • int a = int.Parse(num);
      • ToString() : object에게서 물려받은 ToString() 메서드를 재정의 한 것
        • string a = b.ToString();

  • 상수와 열거 형식 : 변경 불가.
    • 사용이유
      1. 변경 가능 데이터와 변경 불가 데이터의 명시적 구분
      1. (반복해서 작성하는 동일 문자열의 경우) 오타 방지

    • 상수형
      • 선언 후 데이터 변경 불가.

    • 열거형
      • 여러 개의 상수를 열거하는 형식
      • 지정하지 않은 경우 첫 요소 : 0, 두번째 요소 : 1, …
      • 열거 형식의 요소가 어떤 값을 갖느냐는 별 의미가 없기 때문.

Uploaded by N2T

'코딩 > C#' 카테고리의 다른 글

연산자  (0) 2023.10.25
제어문  (0) 2023.10.25
데이터 보관  (0) 2023.10.24
Stack을 C#으로 - 특강 정리(작성중)  (0) 2023.10.18
메모리 특강 내용 정리  (1) 2023.10.06