[C++] 변수

dada·2024년 10월 23일
0

C++

목록 보기
3/7

변수

  • 변수 이름 설정 유의사항
    1. 키워드 사용 불가
    2. 대소문자, 숫자 및 문자로만 구성 가능(특수문자, 공백x)
    3. 대소문자 또는 _로만 시작할 수 있음(숫자 시작 불가)

변수 설명

  • 16bit 체제일 때 변수 short는 2Byte, int는 2Byte 이상, long은 4Byte
  • C언어의 int 정의는 “적어도 2Byte 범위를 포함하는 크기”
  • 64bit 체제로 변경되면서 int의 크기가 변경
  • int8_t, int16_t, int64_t가 생김
    • int8_t: 8Bits, 1Bytes
    • int16_t: 16Bits, 2Bytes
    • int64_t: 64Bits, 8Bytes

예제 코드

short int sinteger = -3;
unsigned short int Unsinteger = -3; // Unsigned int이므로 양수부만 존재

cout << sinteger << endl; // -3 출
cout << Unsinteger << end; // -3이 출력되지 않고 쓰레기값 출력 

고정 소수점 vs 부동 소수점

: 컴퓨터는 고정 소수점과 부동 소수점이 존재

  • 고정 소수점
    • 실수를 표현하는 방법이 단순하여 속도가 빠름
    • 고정 소수점은 정수부와 실수부와 고정되어 있기에 실수 표현이 어려움
    • 정수: 15개 비트, 소수부: 16개 비트만 사용 가능
    • 표현 방식:
      • 정수를 표현하는 비트와 소수를 표현하는 비트를 미리 고정하고 해당 비트만을 사용하여 실수로 표현

      • 처음 1비트는 sign(부호)를 나타내며 양수는 0, 음수는 1

      • 다음 15비트는 integer(정수부), 16비트는 fractional(소수부)

  • 부동 소수점

    • 소수점 자리를 변경하는 방식으로 더 큰 실수 표현 가능

    • 실수를 표현하는 방식이 부정확할 수 있음

    • 2진수를 정규화

    • 표현 방식:

      • 처음 1비트는 sign(부호)를 나타내며 양수는 0, 음수는 1

      • 다음 8비트는 exponent(지수부) [bias 127을 더함]

        → bias: if 2^10이라면 exponent에 10+127인 137을 입력함

      • 다음 23비트는 Mantissa(가수부)

      • ex) 7.625의 경우

        1. 2진수 변환: 111.101(2)
        2. 정규화: 1.11101 * 2^2
        3. exponent = 2(10) + 127(10): bias = 129(10) = 100000001(2) → 2^2의 2 + bias 127
        4. mantissa: 11101
        5. 최종 표현: 01000000011101000000000000000000(2)
  • 부동소수점

    • IEEE Float는 부동 소수점 방식
    • float, double, long double 모두 부동 소수점
    • but, float는 정밀도가 낮아 오차가 발생하여 8byte double을 더 많이 사용
    • 정밀도는 소수점을 표현하는 방식으로 float6~9자리, double15~18자리로 2배 차이
  • Float vs Double

    • 부동 소수점 연산에 있어 double 1번 연산량은 float 2번 연산량과 동일
    • 따라서 속도를 택할지 정확도를 택할지 고민이 필요
profile
AI, Python 등 공부용 블로그

0개의 댓글