ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C 언어 기초 #3 상수, 자료형, 진법, 부동소수점, escape sequence, 오버/언더 플로우
    Programming 기초/C Language 2022. 11. 8. 23:13

    *상수

    리터럴 상수(literal constant) : 3.141592와 같이 이름이 붙지 않는 상수.

    기호 상수(symbolic constant) : 이름이 붙는 상수.

     

    *식별자(identifier) : 변수 이름, 함수 이름 등에 사용되어서 다른 것들과 식별할 수 있게 해주는 것.

    *키워드(keyword), 예약어(reserved words) : c언어에서 고유한 의미를 갖는 특별한 단어

    *int형과 long형의 차이

    32bit cpu에서 int와 long은 같다.

    16bit와 64bit cpu에서는 다르다.

      16bit cpu 32 bit cpu 64 bit cpu
    short 16 bit 16 bit 16 bit
    int 16 bit 32 bit 32 bit
    long 32 bit 32 bit 64 bit

    * 32bit 운영체제와 64bit 운영체제는 무엇이 다른가?

    CPU 레지스터는 메모리 주소를 저장하며, 이것은 프로세서가 RAM에서 데이터에 액세스하는 방법입니다. 레지스터의 한 비트는 메모리의 개별 바이트를 참조할 수 있으므로 32비트 시스템은 최대 4GB(4,294,967,296바이트)의 RAM을 처리할 수 있습니다.

    레지스터의 일부가 메모리 주소 외에 다른 임시 값을 저장하는 데 사용되기 때문에 실제 한계는 3.5GB 정도가 더 적은 경우가 많습니다. 64비트 레지스터는 이론적으로 18,446,744,073,709,551,616바이트 또는 17,179,869,184GB(16EB)의 메모리를 참조할 수 있습니다. 이는 일반 작업대가 접근해야 하는 것보다 몇 백만 배 더 많은 것입니다. 중요한 것은 64비트 컴퓨터(즉 64비트 프로세서가 있다는 뜻)가 4GB 이상의 RAM에 접근할 수 있다는 것입니다.

    출처 : https://learn-news.info/m/17

     

    * 정수형

    자료형 설명 바이트 수 범위
    정수형 부호 있음 short short형 정수 2 -32768 ~ 32767
    int 정수 4 -2147483648 ~ 2147483647
    long long형 정수 4 -2147483648 ~ 2147483647
    부호 없음 unsigned short 부호 없는 short형 정수 2 0 ~ 65535
    unsingend int 부호 없는 정수 4 0 ~ 4294967295
    unsingend long 부호 없는 long형 정수 4 0 ~ 4294967295

    unsigned는 음수가 아닌 값만을 나타낸다는 것을 의미한다. signed는 반대로 음수도 가능하다는 것을 의미한다. (1byte = 8bit)

     

    * 정수형의 한계를 알려주는 헤더 파일 limits.h -> #include <limits.h>

    -> int x = INT_MIN;과 INT_MAX; 는 int형의 상한치 하한치를 나타냄

    -> unsigned short x = USHRT_MAX; 와 USHRT_MIN 는 unsigned short형의 상하한을 나타냄.

    *상수의 자료형을 지정하고 싶을 때 접미사를 이용한다.

    *진법 표시법

    8진법 : 0~7 숫자 사용. 표기하려면 앞에 0을 붙인다. 10을 8진법으로 표기하면

    012(8) = 1 x 8^1 + 2 x 8^0 = 10

    printf()에서 8진법으로 출력하려면 형식제어자 “%o”를 사용한다.

    8진수 앞에 0을 붙여 출력하려면 “%#o”를 사용.

     

    16진법 : 0~9, A~F 사용. 표기하려면 0x를 붙이면 됨. 10을 16진법으로 표기하면

    0xA(16) = 10 x 16^0 = 10

    printf()에서 16진법으로 출력하려면 형식제어자 “%x”를 사용한다.

    16진수 앞에 0을 붙여 출력하려면 “%#x”를 사용.

     

    #define EXCHANGE_RATE 1120

    -> EXCHANGE_RATE 기호 상수를 1120의 값으로 정의. define은 세미콜론 안 붙임

     

    * const int EXCHANGE_RATE = 1120;

    -> const를 변수 선언 앞에 붙이면 상수가 됨.

     

    *부동 소수점 상수

    부동 소수점 상수는 기본적으로 double형으로 저장된다. 만약 4바이트 크기의 float형 상수를 만들려면 실수 상수 끝에 f나 F를 붙여주면 된다. 지수 표기법으로도 표현이 가능하다. (2.)과 같이 점을 붙여 2.0의 부동 소수점 상수로 취급할 수 있다. (프로그램에서는 정수 연산과 부동 소수점 연산을 구분하기 때문!) 소수점이 없으면 정수 연산으로 취급된다.

     

     

    *오버플로우와 언더플로우

    float형 변수는 약 1x10^38 이상을 넘는 수를 저장 못함. 컴파일러는 무한대를 의미하는 특별한 값을 대입하고 값을 INF라고 출력. 출력 예시 : X = 1.#INF00e+000

    반대로 float형에서 1.23456x10^-38보다 작으면 가수부를 조정한다. 10^-40이라면 0.0123456x10-38, 10^-46이면 0.000000e+000으로 출력됨.

     

    *escape sequence 이스케이프 시퀀스

    *정수형으로서의 char형

    -> char형은 8비트(1바이트)의 정수를 저장하는 자료형이다. 따라서 문자뿐만 아니라 작은 정수 값도 저장 가능. 시스템에 따라 다른데, visual C++에서는 char 형이 부호가 있는 자료형이다. signed와 unsigned를 붙이면 부호가 없는 자료형이 된다. visual C++에서 signed char = char 서로 같다.

    char chde = 'A';
    
    printf(" %d %d %d \n", code, code+1, code+2); 	// 65 66 67이 출력된다.
    printf(" %c %c %c \n", code, code+1, code+2);	// A B C가 출력된다.

    code에 'A'의 아스키 코드를 대입하고 code와 code+1, code+2한 값을 출력함. 정수로도 출력이 가능하고 문제 형태로도 출력이 가능함. code에 65가 들어 있는 상태에서 이것을 정수로 해석하여 사용할 수도 있고 아니면 이것을 아스키 코드로 간주하여 문자로 사용할 수도 있다.

     

     

     

    출처 : 쉽게 풀어쓴 C언어 Express

    댓글

Designed by Tistory.