변수. 데이터 유형의 무게는 얼마입니까?

어떤 언어로든 프로그램을 작성할 때 다양한 정보를 저장하려면 다양한 변수를 사용해야 합니다. 변수는 값을 저장하기 위해 예약된 메모리 위치일 뿐입니다. 이는 변수를 생성할 때 메모리의 일부 공간을 절약한다는 의미입니다.

문자, 와이드 문자, 정수, 부동 소수점, 이중 부동 소수점, 부울 등 다양한 데이터 유형의 정보를 저장할 수 있습니다. 변수의 데이터 유형에 따라 운영 체제는 메모리를 할당하고 변수에 무엇을 저장할 수 있는지 결정합니다. 예약된 메모리 .

기본 내장 유형

C++는 프로그래머에게 풍부한 내장 데이터 유형과 사용자 정의 데이터 유형 세트를 제공합니다. 다음 표에는 7가지 주요 C++ 데이터 유형이 나열되어 있습니다.

유형 예어
부울 부울
성격
정수 정수
부동 소수점 뜨다
이중 부동 소수점 더블
가치 없는 무효의
와이드 문자 wchar_t

기본 유형 중 일부는 이 유형의 수정자를 하나 이상 사용하여 수정할 수 있습니다.

  • 서명됨
  • 서명되지 않은
  • 짧은

다음 표에는 변수의 종류, 값을 메모리에 저장하는 데 필요한 메모리 양, 해당 변수에 저장할 수 있는 최대값과 최소값이 나와 있습니다.

유형 일반적인 비트 폭 일반적인 범위
1바이트 -127~127 또는 0~255
서명되지 않은 문자 1바이트 0~255
서명된 문자 1바이트 -127~127
정수 4 바이트 -2147483648~2147483647
부호 없는 정수 4 바이트 0~4294967295
서명된 정수 4 바이트 -2147483648~2147483647
짧은 정수 2바이트 -32768~32767
부호 없는 짧은 정수 범위 0~65,535
서명된 짧은 정수 범위 -32768~32767
긴 정수 4 바이트 -2,147,483,648 ~ 2,147,483,647
긴 정수로 서명됨 4 바이트 long int와 동일
부호 없는 긴 정수 4 바이트 0~4,294,967,295
뜨다 4 바이트 +/- 3.4e +/- 38(~7자리)
더블 8바이트
긴 더블 8바이트 +/- 1.7e +/- 308(~15자리)
wchar_t 2 또는 4바이트 와이드 문자 1개

변수의 크기는 사용하는 컴파일러와 컴퓨터에 따라 위 표의 크기와 다를 수 있습니다. 다음은 컴퓨터에 있는 다양한 데이터 유형의 올바른 크기를 제공하는 예입니다.

#포함하다 네임스페이스 std 사용; int main() (cout<< "Size of char: " << sizeof(char) << endl; cout << "Size of int: " << sizeof(int) << endl; cout << "Size of short int: " << sizeof(short int) << endl; cout << "Size of long int: " << sizeof(long int) << endl; cout << "Size of float: " << sizeof(float) << endl; cout << "Size of double: " << sizeof(double) << endl; cout << "Size of wchar_t: " << sizeof(wchar_t) << endl; return 0; }

이 예제에서는 각 줄 뒤에 개행 문자를 소개하고 연산자<< используется для передачи нескольких значений на экран. Мы также используем оператор 크기()다양한 데이터 유형의 크기를 가져옵니다.

위의 코드를 컴파일하고 실행하면 다음과 같은 출력이 생성됩니다. 출력은 컴퓨터마다 다를 수 있습니다.

char 크기: 1 int 크기: 4 short int 크기: 2 long int 크기: 4 float 크기: 4 double 크기: 8 wchar_t 크기: 4

Typedef 선언

typedef를 사용하여 기존 유형에 대한 새 이름을 만들 수 있습니다. 다음은 typedef를 사용하여 새 유형을 정의하는 간단한 구문입니다.

Typedef 유형 새 이름;

예를 들어, 다음은 다리가 int의 또 다른 이름임을 컴파일러에 알려줍니다.

Typedef int 피트;

이제 다음 선언은 완벽하게 적법하며 거리라는 정수 변수를 생성합니다.

피트 거리

나열된 유형

열거형은 선택적 유형 이름과 해당 유형의 값으로 사용할 수 있는 0개 이상의 식별자 집합을 선언합니다. 각 열거자는 유형이 열거형인 상수입니다. 열거형을 만들려면 키워드를 사용해야 합니다. 열거형. 열거 유형의 일반 보기:

Enum enum-name (이름 목록) var-list;

여기서 enum-name은 enum 유형의 이름입니다. 이름 목록은 쉼표로 구분됩니다. 예를 들어, 다음 코드는 colors라는 색상의 열거형과 color 유형의 변수 c를 정의합니다. 마지막으로 c에는 "blue" 값이 할당됩니다.

열거형 색상(빨간색, 녹색, 파란색) c; c = 파란색;

기본적으로 첫 번째 이름의 값은 0, 두 번째 이름의 값은 1, 세 번째 이름의 값은 2 등입니다. 그러나 이니셜라이저를 추가하여 이름을 특정 값으로 만들 수 있습니다. 예를 들어 다음 열거형에서 녹색의 값은 5입니다.

열거형 색상(빨간색, 녹색 = 5, 파란색);

여기서 파란색은 각 이름이 이전 이름보다 크기 때문에 값이 6입니다.

이번 강의에서는 정수 데이터 유형, 그 값 범위, 나누기, 오버플로 등이 무엇인지와 그 예를 살펴보겠습니다.

정수 데이터 유형

정수 데이터 유형변수가 정수만 포함할 수 있는 유형입니다(소수 부분 없음, 예: -2, -1, 0, 1, 2). C++에는 다섯 가지 기본 정수 유형을 사용할 수 있습니다.

메모: char 유형은 특수한 경우이며 정수이자 문자 데이터 유형입니다. 이에 대해서는 다음 강의 중 하나에서 더 자세히 설명하겠습니다.

위의 정수 유형 간의 주요 차이점은 크기가 클수록 해당 유형의 변수가 저장할 수 있는 값이 더 많다는 것입니다.

정수 변수 정의

다음과 같이 발생합니다.

문자 C; 짧은 int si; // 유효한 short s; //선호되는 int i; 긴 int li; // 유효한 long l; // 바람직하게는 long long int lli; // 유효한 long long ll; // 바람직하다

전체 이름은 short int , long int 및 long long int 를 사용할 수 있지만 단축 버전(int 없음)을 사용하는 것이 좋습니다. 또한 정수를 계속 추가하면 코드를 읽기가 어려워집니다(변수와 쉽게 혼동됨).

정수 데이터 유형의 값 범위 및 부호

이전 강의에서 이미 알고 있듯이 n 비트의 변수는 2n개의 가능한 값을 저장할 수 있습니다. 그런데 이 의미는 무엇입니까? 범위 내에 있는 것입니다. 범위-특정 데이터 유형이 저장할 수 있는 값입니다. 정수 변수의 범위는 두 가지 요소, 즉 크기(비트 단위)와 해당 변수에 의해 결정됩니다. 징후(어쩌면 서명됨또는 서명되지 않은).

부호 있는 정수 유형 (표지판이 있는)는 변수에 양수와 음수가 모두 포함될 수 있음을 의미합니다. 변수를 부호 있는 것으로 선언하려면 signed 키워드를 사용하십시오.

서명된 문자 c; 서명된 짧은 s; i로 서명됨; 길게 서명됨 l; 서명된 긴 긴 ll;

서명된 문자 c;

서명된 짧은 s;

i로 서명됨;

긴 서명됨 l ;

서명된 긴 긴 ll;

기본적으로 부호 있는 키워드는 데이터 유형 앞에 기록됩니다.

1바이트 부호 있는 정수 변수는 -128부터 127까지의 값 범위를 갖습니다. -128부터 127(포함)까지의 모든 값을 안전하게 저장할 수 있습니다.

어떤 경우에는 프로그램에서 음수가 사용되지 않는다는 것을 미리 알 수 있습니다. 이는 변수를 사용하여 사물의 수량이나 크기를 저장할 때 매우 일반적입니다(예: 키나 몸무게는 음수가 될 수 없습니다).

정수형 서명되지 않은 (서명되지 않은)에는 양수만 포함될 수 있습니다. 변수를 다음과 같이 선언하려면 서명되지 않은, unsigned 키워드를 사용하세요:

부호 없는 문자 c; 부호 없는 짧은 s; 서명되지 않은 int i; 부호 없는 긴 l; 부호 없는 긴 긴 ll;

부호 없는 문자 c;

부호 없는 짧은 s ;

서명되지 않은 int i ;

부호 없는 긴 l ;

부호 없는 긴 긴 ll;

1바이트 부호 없는 정수 변수의 값 범위는 0부터 255까지입니다.

변수를 부호 없음으로 선언하면 음수(양수만)를 포함할 수 없다는 의미입니다.

이제 부호 있는 것과 부호 없는 것의 차이점을 이해했으므로 다양한 데이터 유형의 값 범위를 살펴보겠습니다.

크기 유형 값의 범위
1바이트 서명됨 -128~127
부호 없는 1바이트 0에서 255까지
2바이트 서명됨 -32,768에서 32,767까지
부호 없는 2바이트 0부터 65535까지
4바이트 서명됨 -2 147 483 648에서 2 147 483 647까지
부호 없는 4바이트 0에서 4까지 294 967 295
8바이트 서명됨 -9 223 372 036 854 775 808에서 9 223 372 036 854 775 807까지
부호 없는 8바이트 0부터 18까지 446 744 073 709 551 615

수학자용: n번째 비트 수를 갖는 부호 있는 변수의 범위는 -(2 n-1)에서 2 n-1 -1까지입니다. n번째 비트 수를 갖는 부호 없는 변수의 범위는 0부터 (2n)-1까지입니다. 수학자가 아닌 경우: 표를 사용하세요 :)

초보 프로그래머는 부호 있는 변수와 부호 없는 변수를 혼동하는 경우가 있습니다. 그러나 차이점을 기억하는 쉬운 방법이 있습니다. 음수와 양수의 차이점은 무엇입니까? 오른쪽! 앞쪽에 마이너스가 있습니다. 마이너스가 없으면 숫자는 양수입니다. 따라서 부호 있는 정수 유형은 마이너스 기호가 존재할 수 있음을 의미합니다. 숫자는 양수일 수도 있고 음수일 수도 있습니다. 부호 없는 정수 유형은 앞에 마이너스 기호가 전혀 없다는 것을 의미합니다. 숫자는 양수만 가능합니다.

기본값은 무엇입니까(서명됨 또는 서명되지 않음)?

그렇다면 서명 또는 서명되지 않은 변수를 선언하면 어떻게 될까요?

char을 제외한 모든 정수 데이터 유형은 기본적으로 부호가 있습니다. char 유형은 부호가 있거나 부호가 없을 수 있습니다(그러나 일반적으로 부호가 있음).

대부분의 경우 signed 키워드는 char 유형을 제외하고는 작성되지 않습니다(기본적으로 이미 사용됨).

일반적으로 프로그래머는 특별한 필요가 없는 한 부호 없는 정수 유형을 사용하지 않습니다. 통계에 따르면 부호 있는 변수보다 부호 없는 변수에서 더 많은 오류가 발생하기 때문입니다.

규칙: 부호 있는 정수 유형을 사용하세요 대신에 서명되지 않은.

과다

질문: “특정 데이터 유형의 값 범위를 벗어나는 값을 사용하려고 하면 어떻게 되나요?” 답: "오버플로".

과다(영어) "과다")은 변수에 비트를 저장할 충분한 메모리가 할당되지 않아 비트가 손실될 때 발생합니다.

오버플로 예시

4비트로 구성된 부호 없는 변수를 생각해 보세요. 위 표에 나열된 모든 이진수는 이 변수에 들어맞습니다.

"하지만 4비트 이상을 차지하는 값을 할당하려고 하면 어떻게 될까요?" 오른쪽! 과다. 우리 변수는 최하위 4비트(오른쪽 비트)만 저장하고 나머지는 모두 손실됩니다.

예를 들어, 4비트 변수에 숫자 21을 넣으려고 하면 다음과 같습니다.

십진법 바이너리 시스템
21 10101

숫자 21은 5비트(10101)를 차지합니다. 오른쪽의 4비트(0101)는 변수에 맞고 가장 왼쪽 비트(1)는 손실됩니다. 저것들. 변수에는 101(앞의 0은 포함되지 않음)과 동일한 0101이 포함되며 이는 이미 21이 아닌 숫자 5입니다.

메모: 숫자를 이진수에서 십진수로 또는 그 반대로 변환하는 방법에 대한 별도의 강의가 있을 예정이며, 여기에서 모든 것을 자세히 고려하고 논의할 것입니다.

이제 코드의 예를 살펴보겠습니다(짧은 유형은 16비트를 사용함).

#포함하다 int main() ( unsigned short x = 65535; // 16비트 unsigned std::cout 변수가 저장할 수 있는 가장 큰 값<< "x was: " << x << std::endl; x = x + 1; // 65536 - это число больше максимально допустимого числа из диапазона допустимых значений. Следовательно, произойдёт переполнение, так как переменнная x не может хранить 17 бит std::cout << "x is now: " << x << std::endl; return 0; }

#포함하다

정수 메인()

부호 없는 짧은 x = 65535 ; // 16비트 부호 없는 변수가 저장할 수 있는 가장 큰 값

표준::cout<< "x was: " << x << std :: endl ;

x = x + 1; // 65536은 유효한 값 범위에서 허용되는 최대 수보다 큰 수입니다. 따라서 변수 x는 17비트를 저장할 수 없으므로 오버플로가 발생합니다.

표준::cout<< "x is now: " << x << std :: endl ;

0을 반환합니다;

x는 65535였습니다.
x는 현재: 0

무슨 일이 일어났나요? x 변수에 푸시할 수 없는 무언가를 밀어넣으려고 했기 때문에 오버플로가 발생했습니다.

더 알고 싶은 분들을 위해:이진수 65535는 1111 1111 1111 1111로 표현됩니다. 65535는 2바이트(16비트) 부호 없는 정수 변수가 16비트를 모두 사용하기 때문에 저장할 수 있는 가장 큰 숫자입니다. 1을 더하면 숫자 65536이 됩니다. 숫자 65536은 이진수로 1 0000 0000 0000 0000으로 표시되며 17비트를 차지합니다! 따라서 가장 중요한 비트(1)는 손실되고 오른쪽의 16비트는 모두 유지됩니다. 0000 0000 0000 0000 조합은 10진수 0에 해당하며 이것이 우리의 결과입니다.

마찬가지로 유효한 값 범위의 최소값보다 작은 숫자를 사용하면 오버플로가 발생합니다.

#포함하다 int main() ( unsigned short x = 0; // 2바이트 unsigned 변수가 저장할 수 있는 가장 작은 값 std::cout<< "x was: " << x << std::endl; x = x - 1; // переполнение! std::cout << "x is now: " << x << std::endl; return 0; }

#포함하다

정수 메인()

부호 없는 짧은 x = 0 ; // 2바이트 unsigned 변수가 저장할 수 있는 가장 작은 값

표준::cout<< "x was: " << x << std :: endl ;

x = x - 1; // 오버플로!

표준::cout<< "x is now: " << x << std :: endl ;

0을 반환합니다;

위 프로그램을 실행한 결과는 다음과 같습니다.

이전 x: 0
x는 현재: 65535입니다.

오버플로는 정보의 손실로 이어지며 이는 결코 좋은 일이 아닙니다. 변수 값이 사용 중인 데이터 유형의 허용 값 범위를 벗어난 숫자일 수 있다는 의심이나 제안이 조금이라도 있는 경우 더 큰 데이터 유형을 사용하십시오!

이 치트 시트는 C++ 프로그래밍 언어의 주요 데이터 유형과 구현 기능에 대한 정보를 제공합니다. 또한 레코드 끝에는 이러한 유형의 값 범위가 포함된 테이블이 있습니다.

데이터 유형 개념

모든 프로그램의 주요 목적은 데이터를 처리하는 것입니다. 다양한 유형의 데이터가 다르게 저장되고 처리됩니다. 모든 알고리즘 언어에서 모든 상수, 변수, 표현식 또는 함수는 특정 유형을 가져야 합니다.

데이터 유형은 다음을 정의합니다.

  • 컴퓨터 메모리의 데이터 내부 표현;
  • 이 유형의 양이 취할 수 있는 값 세트;
  • 이 유형의 수량에 적용할 수 있는 작업 및 기능입니다.

이러한 특성을 바탕으로 프로그래머는 실제 객체를 표현하기 위해 프로그램에서 사용되는 각 수량의 유형을 선택합니다. 필수 유형 선언을 통해 컴파일러는 다양한 프로그램 구성의 유효성을 확인할 수 있습니다. 값 유형에 따라 데이터를 처리하는 데 사용되는 기계 명령어가 결정됩니다.

모든 유형의 C++ 언어는 다음과 같이 나눌 수 있습니다. 기초적인 그리고 합성물 . C++ 언어는 6가지를 정의합니다. 기본정수, 실수, 문자, 논리값을 나타내는 데이터 유형입니다. 이러한 유형을 기반으로 프로그래머는 설명을 입력할 수 있습니다. 합성물유형. 여기에는 배열, 열거형, 함수, 구조, 참조, 포인터, 공용체 및 클래스가 포함됩니다.

C++의 기본 데이터 유형

기본(표준) 데이터 유형은 산술 연산에 사용될 수 있기 때문에 종종 산술이라고 불립니다. 주요 유형을 설명하기 위해 다음이 정의됩니다.

  1. int(int);
  2. char(문자);
  3. wchar_t(widechar);
  4. bool(부울);
  5. float(실제);
  6. double(이중 정밀도 실수)

처음 네 가지 유형은 정수( 전체 ), 마지막 두 개 - 부동 소수점 유형 . 정수 값을 처리하기 위해 컴파일러가 생성하는 코드는 부동 소수점 값에 대한 코드와 다릅니다.

4개가 있다 유형 지정자 , 표준 유형의 내부 표현과 값 범위를 명확히합니다.

  • 짧은 (짧은);
  • 길다(길다);
  • 서명됨(서명됨);
  • 서명되지 않은.

정수형(int)

int 유형의 크기는 표준에 의해 정의되지 않지만 컴퓨터와 컴파일러에 따라 다릅니다. 16비트 프로세서의 경우 이 유형의 값에 2바이트가 할당되고, 32비트 프로세서의 경우 4바이트가 할당됩니다.

유형 이름 앞의 short 지정자는 프로세서 용량에 관계없이 숫자에 2바이트를 할당해야 함을 컴파일러에 나타냅니다. 긴 지정자는 정수 값이 4바이트를 차지함을 의미합니다. 따라서 16비트 컴퓨터에서는 int와 short int가 상응하고, 32비트 컴퓨터에서는 int와 long int가 상응합니다.

내부 표현 정수형 값 - 바이너리 코드의 정수. 부호 있는 지정자를 사용하는 경우 숫자의 최상위 비트는 부호 있는 것으로 해석됩니다(0은 양수, 1은 음수). unsigned 지정자는 최상위 비트가 숫자 코드의 일부로 처리되므로 양수만 표시하도록 허용합니다. 따라서 int 유형의 값 범위는 지정자에 따라 다릅니다. IBM PC 호환 컴퓨터에 대한 다양한 지정자를 사용하는 정수 유형 값의 범위는 항목 끝에 있는 "단순 데이터 유형의 값 범위" 표에 나와 있습니다.

기본적으로 모든 정수 유형은 부호 있는 것으로 간주됩니다. 즉 부호 있는 지정자를 생략할 수 있습니다.

프로그램에 있는 상수에는 해당 유형에 따라 한 가지 유형이 할당됩니다. 어떤 이유로 프로그래머가 이 유형에 만족하지 않는 경우 접미사 L, l(긴) 및 U, u(부호 없음)를 사용하여 필요한 유형을 명시적으로 나타낼 수 있습니다. 예를 들어, 상수 32L은 long 유형이고 4바이트를 차지합니다. L 및 U 접미사를 동시에 사용할 수 있습니다(예: 0x22UL 또는 05Lu).

메모

short int, long int, signed int 및 unsigned int 유형은 각각 short, long, signed 및 unsigned로 축약될 수 있습니다.

문자 유형(char)

문자 유형의 값에는 특정 컴퓨터의 문자 세트에 있는 모든 문자를 수용하기에 충분한 바이트 수가 할당되며, 이에 따라 유형의 이름이 결정됩니다. 일반적으로 이는 1바이트입니다. char 유형은 다른 정수 유형과 마찬가지로 부호가 있거나 부호가 없을 수 있습니다. 부호 있는 값은 -128에서 127 사이의 값을 저장할 수 있습니다. 부호 없는 지정자를 사용하면 값의 범위는 0에서 255까지 가능합니다. 이는 256자 ASCII 문자 집합의 모든 문자를 저장하는 데 충분합니다. char 유형의 값은 지정된 범위의 경계를 초과하지 않는 정수를 저장하는 데에도 사용됩니다.

확장 문자 유형(wchar_t)

wchar_t 유형은 유니코드와 같이 1바이트로는 인코딩하기에 충분하지 않은 문자 집합에서 작동하도록 설계되었습니다. 이 유형의 크기는 구현에 따라 다릅니다. 일반적으로 short 유형에 해당합니다. wchar_t 유형의 문자열 상수는 접두사 L로 작성됩니다(예: L»Gates»).

부울 유형(bool)

부울 값은 예약어인 true와 false 값만 취할 수 있습니다. false 값을 나타내는 내부 형식은 0(영)입니다. 다른 모든 값은 true로 해석됩니다. 정수형으로 변환하면 true 값은 1이 됩니다.

부동 소수점 유형(float, double 및 long double)

C++ 표준은 실수 값을 저장하기 위한 세 가지 데이터 유형인 float, double 및 long double을 정의합니다.

부동 소수점 데이터 유형은 정수 데이터 유형과 다르게 컴퓨터 메모리에 저장됩니다. 실수의 내부 표현은 가수와 지수의 두 부분으로 구성됩니다. IBM PC 호환 컴퓨터에서 부동소수점 값은 4바이트를 차지하며, 그 중 가수 기호에 이진수 1자리, 지수에 8비트, 가수에 23비트가 할당됩니다. 가수는 1.0보다 크고 2.0보다 작은 숫자입니다. 가수의 앞자리는 항상 1이므로 저장되지 않습니다.

8바이트를 차지하는 double 값의 경우 지수와 가수에 각각 11비트와 52비트가 할당된다. 가수의 길이는 숫자의 정밀도를 결정하고 지수의 길이는 숫자의 범위를 결정합니다.항목 끝 부분의 표에서 볼 수 있듯이 float 및 long int 값에 동일한 바이트 수가 할당되면 허용되는 값의 범위가 크게 다릅니다. 내부 표현 형태로 인해.

double 유형 이름 앞의 긴 지정자는 해당 값에 10바이트가 할당됨을 나타냅니다.

부동 소수점 상수는 기본적으로 double 유형입니다. 접미사 F, f(float) 및 L, l(long)을 사용하여 상수 유형을 명시적으로 지정할 수 있습니다. 예를 들어, 상수 2E+6L은 long double 유형이고 상수 1.82f는 float 유형입니다.

플랫폼 간에 이식 가능한 프로그램을 작성하려면 int 유형의 크기에 대해 가정할 수 없습니다. 이를 얻으려면 sizeof 연산을 사용해야 하며 그 결과는 유형의 크기(바이트)입니다. 예를 들어, MS-DOS 운영 체제의 경우 sizeof(int)는 2가 되지만 Windows 98 또는 OS/2의 경우 결과는 4가 됩니다.

ANSI 표준은 기본 유형의 값 범위를 지정하지 않으며 크기 간의 관계만 정의합니다. 예:

sizeof(float) ≤ slzeof(double) ≤ sizeof(long double)
sizeof(char) ≤ slzeof(short) ≤ sizeof(int) ≤ sizeof(long)

메모

정수 유형에 허용되는 최소 및 최대 값은 구현에 따라 다르며 헤더 파일에 제공됩니다. (), 실제 유형의 특성 - 파일에 있음 () 및 Numeric_limits 클래스 템플릿에도 있습니다.

유형 무효

나열된 것 외에도 언어의 주요 유형에는 void 유형이 포함되지만 이 유형의 값 세트는 비어 있습니다. 값을 반환하지 않는 함수를 정의하고, 빈 함수 인수 목록을 지정하고, 포인터의 기본 유형으로 지정하고, 유형 캐스팅 작업에서 사용됩니다.

IBM PC 호환 컴퓨터용 C++의 단순 데이터 유형 값 범위

큐: IBM PC 호환 컴퓨터라는 용어는 무엇을 의미합니까?
A: IBM PC 호환 컴퓨터는 구조적으로 IBM PC, XT 및 AT와 유사한 컴퓨터입니다. IBM PC 호환 컴퓨터는 Intel 8086과 호환되는 마이크로프로세서를 기반으로 구축되었습니다(그리고 아시다시피 이후의 모든 Intel 프로세서는 8086과 완전히 역호환됩니다). 실제로 이들은 거의 모든 최신 컴퓨터입니다.

계산 속도와 메모리 양은 다음에 따라 달라지므로 프로그래머가 특정 장비의 기능을 가장 효과적으로 사용할 수 있는 기회를 제공하기 위해 데이터 표현의 범위와 정확도가 다른 다양한 유형의 정수 및 실수 유형이 도입되었습니다. 유형의 선택. 그러나 한 유형의 컴퓨터에 최적화된 프로그램은 다른 플랫폼으로 이식되지 않을 수 있으므로 일반적으로 데이터 유형의 특정 특성에 의존하는 것을 피해야 합니다.

유형 값의 범위 크기(바이트)
부울 진실과 거짓 1
서명된 문자 -128 … 127 1
서명되지 않은 문자 0 … 255 1
서명된 짧은 정수 -32 768 … 32 767 2
부호 없는 짧은 정수 0 … 65 535 2
긴 정수로 서명됨 -2 147 483 648 … 2 147 483 647 4
부호 없는 긴 정수 0 … 4 294 967 295 4
뜨다 3.4e-38 … 3.4e+38 4
더블 1.7e-308 ~ 1.7C+308 8
긴 더블 3.4e-4932 … 3.4e+4932 10

실제 유형의 경우 최소값과 최대값의 절대값을 표에 표시합니다.

C 언어에서는 "데이터 유형"과 "유형 수정자" 개념이 구분됩니다. 데이터 유형은 정수이고 수정자는 부호 있음 또는 부호 없음입니다. 부호 있는 정수는 양수 값과 음수 값을 모두 갖고, 부호 없는 정수는 양수 값만 갖습니다. C 언어에는 다섯 가지 기본 유형이 있습니다.

  • char – 문자.
  • char 유형의 변수는 크기가 1바이트이고 해당 값은 코드 테이블의 다양한 문자입니다(예: 'f', ':', 'j'(프로그램에 작성될 때 단일 문자로 묶임) 인용 부호).

  • int – 전체.
  • int 유형의 변수 크기는 C 언어 표준에 정의되어 있지 않습니다. 대부분의 프로그래밍 시스템에서 int 변수의 크기는 전체 기계어의 크기에 해당합니다. 예를 들어, 16비트 프로세서용 컴파일러에서 int 유형의 변수 크기는 2바이트입니다. 이 경우 이 변수의 부호 있는 값은 -32768부터 32767까지의 범위에 있을 수 있습니다.

  • 플로트 – 진짜.
  • float 키워드를 사용하면 실제 유형의 변수를 정의할 수 있습니다. 해당 값에는 점으로 구분된 소수 부분이 있습니다(예: -5.6, 31.28 등). 실수는 부동 소수점 형식으로 작성할 수도 있습니다(예: -1.09e+4). 기호 "e" 앞의 숫자를 가수라고 하고, "e" 뒤의 숫자를 지수라고 합니다. float 유형의 변수는 메모리에서 32비트를 차지합니다. 3.4e-38에서 3.4e+38 범위의 값을 사용할 수 있습니다.

  • double – 배정밀도 실수;
  • double 키워드를 사용하면 배정밀도 실수 변수를 정의할 수 있습니다. float 변수보다 두 배의 메모리 공간을 차지합니다. double 유형의 변수는 1.7e-308에서 1.7e+308 사이의 값을 취할 수 있습니다.

  • 무효 – 가치가 없습니다.
  • void 키워드는 객체의 값을 중화하는 데 사용됩니다(예: 값을 반환하지 않는 함수를 선언하는 경우).

변수 유형:

프로그램은 단순하거나 구조화된 다양한 데이터로 작동됩니다. 단순 데이터는 정수와 실수, 기호, 포인터(메모리에 있는 객체의 주소)입니다. 정수에는 분수 부분이 없지만 실수에는 분수 부분이 있습니다. 구조화된 데이터는 배열과 구조입니다. 이에 대해서는 아래에서 논의하겠습니다.

변수는 이름이 있고 일부 값을 저장하는 컴퓨터 메모리의 셀입니다. 변수의 값은 프로그램 실행 중에 변경될 수 있습니다. 새 값이 셀에 기록되면 이전 값은 지워집니다.

변수 이름을 의미있게 지정하는 것이 좋은 스타일입니다. 변수 이름은 1~32자까지 가능합니다. C에서는 문자로 간주되는 소문자, 대문자, 숫자, 밑줄을 사용할 수 있습니다. 첫 번째 문자는 문자여야 합니다. 변수 이름은 예약어와 일치할 수 없습니다.

문자를 입력하세요

char은 가장 경제적인 유형입니다. char 유형은 signed 또는 unsigned일 수 있습니다. "signed char"(부호 있는 유형) 및 "unsigned char"(부호 없는 유형)로 표시됩니다. 부호 있는 유형은 -128에서 +127 범위의 값을 저장할 수 있습니다. Unsigned – 0 ~ 255. char 변수에 1바이트의 메모리(8비트)가 할당됩니다.

signed 및 unsigned 키워드는 선언된 변수의 0비트가 해석되는 방식을 나타냅니다. 즉, unsigned 키워드가 지정된 경우 0비트는 숫자의 일부로 해석되고, 그렇지 않으면 0비트는 부호 있는 것으로 해석됩니다.

정수를 입력하세요

정수 값 int는 짧거나 길 수 있습니다. short 키워드는 signed 또는 unsigned 키워드 뒤에 배치됩니다. 따라서 signed short int, unsigned short int, signed long int, unsigned long int와 같은 유형이 있습니다.

signed short int(부호 있는 짧은 정수) 유형의 변수는 -32768에서 +32767까지, unsigned short int(부호 없는 짧은 정수) - 0에서 65535까지의 값을 가질 수 있습니다. 각 변수에는 정확히 2바이트의 메모리가 할당됩니다(16 비트).

signed short int 유형의 변수를 선언할 때 signed 키워드와 short 키워드는 생략할 수 있으며, 이러한 변수 유형은 간단히 int로 선언할 수 있습니다. short라는 하나의 키워드로 이 유형을 선언하는 것도 가능합니다.

unsigned short int 변수는 unsigned int 또는 unsigned short로 선언될 수 있습니다.

각 signed long int 또는 unsigned long int 값에 대해 4바이트의 메모리(32비트)가 할당됩니다. 이 유형의 변수 값은 각각 -2147483648 ~ 2147483647 및 0 ~ 4294967295 범위에 있을 수 있습니다.

8바이트의 메모리(64비트)가 할당되는 long long int 유형의 변수도 있습니다. 서명되거나 서명되지 않을 수 있습니다. 부호 있는 유형의 경우 값 범위는 -9223372036854775808에서 9223372036854775807까지이고 부호 없는 유형의 경우 0에서 18446744073709551615까지입니다. 부호 있는 유형은 두 개의 긴 긴 키워드로 간단히 선언할 수도 있습니다.

유형 범위 16진수 범위 크기
서명되지 않은 문자 0 … 255 0x00...0xFF 8비트
서명된 문자
아니면 단순히
-128 … 127 -0x80…0x7F 8비트
부호 없는 짧은 정수
아니면 단순히
부호 없는 정수또는 부호 없는 짧은
0 … 65535 0x0000…0xFFFF 16비트
서명된 짧은 정수또는 서명된 정수
아니면 단순히
짧은또는 정수
-32768 … 32767 0x8000…0x7FFF 16비트
부호 없는 긴 정수
아니면 단순히
부호 없는 긴
0 … 4294967295 0x00000000 … 0xFFFFFFFF 32비트
긴 서명
아니면 단순히
-2147483648 … 2147483647 0x80000000 … 0x7FFFFFFF 32비트
부호 없는 긴 긴 0 … 18446744073709551615 0x0000000000000000 … 0xFFFFFFFFFFFFFFFF 64비트
오랫동안 서명했습니다
아니면 단순히
오래 오래
-9223372036854775808 … 9223372036854775807 0x8000000000000000 … 0x7FFFFFFFFFFFFFFFF 64비트

변수 선언

변수는 선언문에서 선언됩니다. 선언문은 유형 사양과 쉼표로 구분된 변수 이름 목록으로 구성됩니다. 끝에 세미콜론이 있어야 합니다.

[수정자] type_specifier 식별자 [, 식별자] ...

수정자 – 키워드 signed, unsigned, short, long.
유형 지정자는 선언되는 변수의 유형을 지정하는 char 또는 int 키워드입니다.
식별자는 변수의 이름입니다.

문자 x; int a, b, c; 부호 없는 긴 긴 y;

선언되면 변수를 초기화할 수 있습니다. 즉, 초기값을 할당할 수 있습니다.

정수 x = 100;

선언되면 변수 x에는 즉시 숫자 100이 포함됩니다. 초기화된 변수를 별도의 줄에 선언하는 것이 좋습니다.

프로그래밍에서 데이터 유형은 두 세트, 즉 값 세트와 이에 적용될 수 있는 작업 세트의 모음입니다. 예를 들어, 덧셈(+), 곱셈(*), 정수 나눗셈(/), 나머지(%), 뺄셈(−) 연산은 유한한 자연수 집합으로 구성된 음이 아닌 정수 데이터 형식에 적용될 수 있습니다.

프로그래밍 언어에는 일반적으로 기본 내장 단위로 프로그래밍 언어에서 제공하는 기본 데이터 유형 세트가 있습니다. C++에서 언어 작성자는 이러한 유형을 기본 유형이라고 부릅니다. C++의 기본 유형은 다음과 같습니다.

  • 부울(bool);
  • 문자(예: 문자);
  • int(예: int);
  • 부동 소수점(예: 부동 소수점);
  • 열거형(프로그래머가 정의함)
  • 무효의 .

나열된 유형 외에도 다음 유형이 구축됩니다.

  • 실증적(예: int*);
  • 배열(예: 문자);
  • 참조(예: double&);
  • 다른 구조.

리터럴(예: 1, 2.4F, 25e-4, 'a' 등)의 개념으로 넘어가겠습니다. 리터럴은 고정된 값을 나타내는 프로그램 소스 코드의 항목입니다. 즉, 리터럴은 단순히 프로그램 코드에서 특정 유형의 객체(값)를 표현한 것입니다. C++에는 정수, 부동 소수점, 문자, 부울 및 문자열 값을 쓸 수 있는 기능이 있습니다.

정수 유형 리터럴은 다음과 같이 작성할 수 있습니다.

  • 10번째 숫자 체계. 예를 들어 1205 ;
  • 0 + 숫자 형식의 8번째 숫자 시스템입니다. 예를 들어 0142;
  • 0x + 숫자 형식의 16번째 숫자 시스템입니다. 예를 들어 0x2F입니다.

24, 030, 0x18 - 이들은 모두 다른 숫자 체계로 된 동일한 숫자의 레코드입니다.
부동 소수점 숫자를 쓰려면 점 표기법(0.1, .5, 4)을 사용하십시오.
지수 표기법 - 25e-100. 그러한 레코드에는 공백이 없어야 합니다.

리터럴로 작성된 값을 연결할 수 있는 이름을 변수라고 합니다. 변수는 데이터에 액세스하는 데 주소를 사용할 수 있는 이름이 지정되거나 주소 지정이 가능한 메모리 영역입니다. 이 데이터는 프로그램 실행 중에 특정 방식으로 메모리에 기록되고 다시 기록되고 삭제됩니다. 변수를 사용하면 언제든지 데이터에 액세스하고 필요한 경우 데이터를 변경할 수 있습니다. 변수 이름에서 검색할 수 있는 데이터를 변수 값이라고 합니다.
프로그램에서 변수를 사용하기 위해서는 선언이 필요하며, 필요하다면 정의(=초기화)가 가능합니다. 프로그램 텍스트의 변수 선언에는 기본 유형과 선언자라는 두 부분이 반드시 포함됩니다. 지정자와 초기화자는 선택적인 부분입니다:

Const int 예 = 3; // 여기서 const는 지정자입니다. // int는 기본 유형입니다. // 예는 변수의 이름입니다. // = 3 - 초기화 프로그램입니다.

변수 이름은 라틴 알파벳 문자(소문자 및 대문자), 숫자 및/또는 밑줄로 구성된 일련의 문자이지만 첫 번째 문자는 숫자가 될 수 없습니다. 변수 이름은 저장 내용을 항상 쉽게 추측할 수 있도록 선택해야 합니다(예: "monthPayment"). 노트와 실습에서는 변수 기록 규칙에 CamelCase 표기법을 사용하겠습니다. 변수 이름은 해당 언어에 예약된 단어와 일치할 수 없습니다. 이러한 단어의 예로는 if, while, function, goto, switch 등이 있습니다.

변수 이름 외에도 선언자에는 다음과 같은 추가 문자가 포함될 수 있습니다.

  • * - 포인터; 이름 앞에;
  • *const - 상수 포인터; 이름 앞에;
  • &-링크; 이름 앞에;
  • - 배열; 이름 뒤에;
  • () - 기능; 이름 뒤에.

이니셜라이저를 사용하면 변수 선언 직후에 변수 값을 정의할 수 있습니다. 이니셜라이저는 동등 리터럴(=)로 시작한 다음 변수 값 설정을 진행합니다. 일반적으로 C++의 등호는 할당 작업을 나타냅니다. 이를 통해 변수 값을 설정하고 변경할 수 있습니다. 종류별로 다를 수 있습니다.

지정자는 유형 이외의 추가 속성을 지정합니다. 예제에 제공된 const 지정자를 사용하면 변수 값에 대한 후속 변경을 금지할 수 있습니다. 이러한 불변 변수를 상수 또는 상수라고 합니다.

초기화 없이 상수를 선언하는 것은 논리적인 이유로 작동하지 않습니다.

상수 EMPTY_CONST; // 오류, 상수 변수가 초기화되지 않았습니다. const int EXAMPLE = 2; // 값이 2인 상수 EXAMPLE = 3; // 오류입니다. 상수 변수에 값을 할당하려고 했습니다.

상수의 이름을 지정할 때는 대문자만 사용하고 단어는 밑줄로 구분하는 것이 일반적입니다.

C++의 기본 데이터 유형

각 유형을 검토하는 동안 독자는 데이터 유형의 정의를 잊어서는 안됩니다.

1. 정수형(char, short(int), int, long(int), long long)

이름에서 값 집합이 정수로 구성된다는 것을 쉽게 이해할 수 있습니다. 또한 나열된 각 유형의 값 세트는 부호가 있거나 부호가 없을 수 있습니다. 세트에 포함된 요소 수는 해당 유형의 값을 저장하는 데 사용되는 메모리 크기에 따라 다릅니다. 예를 들어, char 유형의 변수에 대해 1바이트의 메모리가 할당되므로 총 요소는 다음과 같습니다.

  • 2 8N = 2 8 * 1 = 256, 여기서 N은 값을 저장할 메모리 크기(바이트)입니다.

이 경우 사용 가능한 정수의 범위는 다음과 같습니다.

  • - 서명되지 않은 문자의 경우
  • [-128..127] - 서명된 문자의 경우

기본적으로 정수 변수는 부호 있는 것으로 간주됩니다. 변수가 부호가 없어야 함을 코드에서 나타내기 위해 부호 있는 속성이 왼쪽의 기본 유형에 추가됩니다. 서명되지 않음:

부호 없는 긴 값; // 정수(long) 부호 없는 유형을 지정합니다.

나열된 유형은 저장에 필요한 메모리 크기만 다릅니다. C++ 언어는 기계에 상당히 의존적이므로 언어 ​​표준은 다음 조건만 보장합니다.

  • 1 = 문자 크기 ≤ 짧은 크기 ≤ int 크기 ≤ 긴 크기.

일반적으로 유형의 크기는 char - 1, short - 2, int - 4, long -8, long long - 8바이트입니다.

+, -, *, /, %와 같은 정수 유형의 값으로 산술 연산을 수행할 수 있습니다. 비교 연산: ==, !=,<=, <, >, >=; 비트 연산: &, |, xor,<<, >>.
덧셈, 곱셈, 뺄셈, 비교 등 대부분의 연산은 이해하기 쉽습니다. 때로는 산술 연산을 수행한 후 결과가 값 범위를 벗어날 수 있습니다. 이 경우 프로그램에서 오류가 발생합니다.
정수 나누기(/)는 한 정수를 다른 정수로 나눈 정수 부분을 찾습니다. 예를 들어:

  • 6 / 4 = 1;
  • 2 / 5 = 0;
  • 8 / 2 = 4.

백분율 기호(%)는 두 정수를 나눈 나머지를 결정하는 연산을 나타냅니다.

  • 6 % 4 = 2;
  • 10 % 3 = 1.

연산을 이해하기가 더 어려운 것은 비트 연산입니다: & (AND), | (OR), xor(배타적 OR),<< (побитовый сдвиг влево), >>(비트 오른쪽 시프트).

비트 연산 AND, OR 및 XOR은 각 정보 비트에 해당 논리 연산을 적용합니다.

  • 1 10 = 01 2
  • 3 10 = 11 2
  • 1 10 & 3 10 = 01 2 & 11 2 = 01 2
  • 1 10 | 3 10 = 01 2 | 11 2 = 11 2
  • 1 10 xor 3 10 = 01 2 xor 11 2 = 10 2

이미지 처리에서는 빨간색, 파란색, 녹색의 3개 채널이 색상에 사용되며 투명도도 int 변수에 저장됩니다. 각 채널에는 0에서 255까지의 값 범위가 있습니다. 16진수 시스템에서 특정 값은 다음과 같이 기록됩니다. 0x180013FF; 값 18 16은 빨간색 채널, 00 16 - 파란색, 13 16 - 녹색, FF - 알파 채널(투명도)에 해당합니다. 이러한 정수에서 특정 채널을 선택하려면 소위 채널이 사용됩니다. 여기서 관심 있는 위치는 F 16 또는 1 2입니다. 즉, 파란색 채널의 값을 강조하려면 마스크를 사용해야 합니다. 비트 AND:

Int blue_channel = 0x180013FF & 0x00FF0000;

그 후 결과 값은 필요한 비트 수만큼 오른쪽으로 이동됩니다.

비트 시프트는 연산의 오른쪽에 지정된 만큼의 이진수만큼 숫자를 왼쪽이나 오른쪽으로 이동합니다. 예를 들어 char 유형의 숫자 ​​39는 00100111과 같이 이진수로 작성됩니다.

Char 바이너리예제 = 39; // 00100111 char 결과 = 바이너리예제<< 2; // сдвигаем 2 бита влево, результат: 10011100

변수가 부호 없는 유형인 경우 결과는 숫자 156이 되고 부호 있는 유형의 경우 결과는 -100과 같습니다. 부호 있는 정수 유형의 경우 비트 표현의 최상위 비트 단위는 숫자가 음수라는 표시입니다. 이 경우 모두 1로 구성된 이진 형식의 값은 -1에 해당합니다. 1이 가장 중요한 숫자에만 있고 나머지 숫자는 0인 경우 해당 숫자는 특정 유형에 대한 최소값을 갖습니다. char의 경우 -128입니다.

2. 부동소수점형(float, double(float))

부동 소수점 값 집합은 실수의 하위 집합이지만 모든 실수가 이진 형식으로 표현 가능한 것은 아니므로 때로는 어리석은 오류가 발생합니다.

부동 값 = 0.2; 값 == 0.2; // 오류, 여기 값은 0.2와 같지 않습니다.

부동 소수점 변수로 작업할 때 프로그래머는 동등 또는 불평등 테스트를 사용해서는 안 됩니다. 대신 특정 간격 내에 속하는 테스트가 일반적으로 사용됩니다.

값 - 0.2< 1e-6; // ok, подбирать интервал тоже нужно осторожно

비교 연산 외에도 부동 소수점 유형은 실수를 사용한 수학적 연산에 완전히 대응하는 4개의 산술 연산을 지원합니다.

3. 부울(논리) 유형(bool)

true(true)와 false(false)의 두 가지 값으로만 ​​구성됩니다. 이 유형의 변수를 사용하려면 논리 연산이 사용됩니다: ! (NOT), ==(동등), !=(비동등), &&(논리적 AND), || (논리적 OR). 각 연산의 결과는 해당 진리표에서 확인할 수 있습니다. 예를 들어:

XY XOR0 0 0 0 1 1 1 0 1 1 1 0

4. 문자형(char, wchar_t)

char 유형은 정수 유형(보통 이 유형을 바이트라고 함)일 뿐만 아니라 테이블의 문자 번호를 ASCII 문자로 저장하는 문자 유형이기도 합니다. 예를 들어 코드 0x41은 문자 'A'에 해당하고 0x71 - 't'에 해당합니다.

때때로 ASCII 테이블에 고정되지 않은 문자를 사용해야 하므로 저장에 1바이트 이상이 필요합니다. 이를 위한 와이드 문자(wchar_t)가 있습니다.

5.1. 배열

배열을 사용하면 동일한 유형의 순차적 요소 집합을 저장할 수 있습니다. 배열은 연속된 블록으로 메모리에 저장되므로 크기를 지정하지 않으면 배열을 선언할 수 없습니다. 배열을 선언하려면 크기를 나타내는 변수 이름 뒤에 대괄호()를 씁니다. 예를 들어:

Int myArray; // 정수 유형의 5개 요소 배열

배열을 초기화하려면 값이 중괄호 안에 나열됩니다. 변수 선언 시에만 이 방법으로 초기화할 수 있습니다. 그런데 이 경우 배열의 크기를 지정할 필요가 없습니다.

내부 배당률 = (1, 3, 7, 9, 11); // 배열은 5개의 값으로 초기화됩니다.

배열(배열 요소)의 특정 값에 액세스하려면 요소 번호(번호는 0부터 시작)를 나타내는 인덱스 액세스 연산()을 사용합니다. 예를 들어:

승산; // 배열의 첫 번째 요소에 액세스합니다. 1 확률 값을 반환합니다. // 세 번째 요소에 액세스합니다. 7 확률 = 13 값을 반환합니다. // 배열 배당률의 5번째 요소에 새 값을 할당합니다. // 접근 오류

5.3. 문자열

문자열을 작성하기 위해 프로그래머는 문자열이 일련의 문자(배열)라는 개념을 사용합니다. 줄 끝을 식별하려면 특수 줄 끝 문자 '\0'을 사용합니다. 백슬래시와 식별 문자로 구성된 이러한 특수 문자를 제어 또는 이스케이프 문자라고 합니다. 예를 들어 '\n' - 새 줄의 시작, '\t' - 표 형식도 있습니다. 문자열에 백슬래시를 쓰려면 이스케이프가 사용됩니다. 기호 자체 앞에 또 다른 슬래시가 배치됩니다: '\'. 이스케이프는 따옴표를 쓰는 데에도 사용됩니다.

문자열 변수를 만들어 보겠습니다.

Char textExample = ('T', 'e', ​​​​'s', 't', '\0'); // 문자열 "Test"가 기록됩니다.

문자열 초기화에 대한 단순화된 표기법이 있습니다.

Char textExample = "테스트"; // 마지막 문자는 기록되지 않지만 크기는 여전히 5입니다.

자세히 설명하지 않고 여기에 또 다른 유용한 데이터 유형인 문자열이 있습니다. 문자열
예를 들어 다음 유형을 추가할 수 있습니다.

String hello = "안녕하세요,"; 문자열 이름 = "맥스!"; 문자열 hello_name = 안녕하세요 + 이름; // "Hello, Max!" 문자열을 가져옵니다.

6. 링크

정수 a = 2; // 변수 "a"는 값 2를 가리킵니다. int &b = a; // 변수 "b"는 "a"와 같은 위치를 가리킵니다. b = 4; // b 값을 변경하면 프로그래머는 a 값을 변경합니다. 이제 a = 4 int &c = 4; // 오류입니다. 왜냐하면 이 작업을 수행할 수 없기 때문입니다. 참조에 값을 할당할 수 없습니다.

7. 색인

이 데이터 유형을 이해하려면 이 유형의 많은 값이 데이터가 시작되는 메모리 셀의 주소라는 점을 기억해야 합니다. 포인터는 더하기(+), 빼기(-) 및 역참조(*) 작업도 지원합니다.

주소 0x0은 포인터가 비어 있음을 의미합니다. 어떤 데이터도 가리키지 않습니다. 이 주소에는 자체 리터럴(NULL)이 있습니다.

Int *nullPtr = NULL; // 널 포인터

정수 또는 다른 주소로 주소를 더하거나 빼면 다음이 가능합니다.
프로그램에 사용 가능한 메모리를 이동합니다.

포인터에 저장된 주소부터 시작하여 데이터를 검색하는 작업을 역참조(*)라고 합니다. 프로그램은 필요한 수의 메모리 셀을 읽고 메모리에 저장된 값을 반환합니다.

Int valueInMemory = 2; // 정수형 변수 설정 int *somePtr = // 변수의 주소를 복사합니다. 여기서 & - 변수 somePtr의 주소를 반환합니다. // 메모리 셀의 주소(예: 0x2F) *somePtr; // 값은 4개 셀(0x2F, 0x30, 0x31 및 0x32)에 저장됩니다.

복사 작업과 구문상 동일한 할당 작업은 포인터에 사용할 수 없습니다. 즉, 다른 포인터의 주소나 변수의 주소를 복사할 수는 있지만 주소의 값을 직접 결정할 수는 없습니다.

포인터 자체는 다른 타입의 변수 값과 마찬가지로 메모리에 저장되며 4바이트를 차지하므로 포인터에 대한 포인터를 생성할 수 있다.

8. 환승

열거형은 프로그래머가 정의한 유일한 기본 유형입니다. 전반적으로 열거형은 명명된 정수 상수의 순서가 지정된 집합이며, 열거형의 이름은 기본 유형입니다.

열거형 색상(RED, BLUE, GREEN);

기본적으로 RED = 0, BLUE = 1, GREEN = 2입니다. 따라서 값을 서로 비교할 수 있습니다. 빨간색< BLUE < GREEN. Программист при объявлении перечисления может самостоятельно задать значения каждой из констант:

열거형 액세스(READ = 1, WRITE = 2, EXEC = 4)

값이 2의 거듭제곱인 열거형을 사용하는 것이 편리한 경우가 많습니다. 이진 표현에서 2의 거듭제곱인 숫자는 1과 0으로 구성됩니다. 예를 들어:

8 10 = 00001000 2

이 숫자를 더한 결과는 항상 어떤 숫자가 추가되었는지 명확하게 나타냅니다.

37 10 = 00100101 2 = 00000001 2 + 00000100 2 + 00100000 2 = 1 10 + 4 10 + 32 10

무효의

구문론적으로 void 유형은 기본 유형에 속하지만 더 복잡한 유형의 일부로만 사용될 수 있습니다. void 유형의 객체가 없습니다. 일반적으로 이 유형은 함수에 반환 값이 없음을 나타내거나 정의되지 않은 유형의 객체에 대한 포인터의 기본 유형으로 사용됩니다.

공허한 물체; // 오류, void 유형의 객체가 없습니다. void // 오류, void에 대한 참조가 없습니다. void *ptr; // 좋습니다. 알 수 없는 유형에 대한 포인터를 저장합니다.

종종 우리는 함수가 어떤 값도 반환하지 않는다는 것을 나타내기 위해 특별히 void를 사용합니다. void 유형 포인터는 프로그래머가 메모리 무결성과 올바른 유형 캐스팅에 대해 전적인 책임을 질 때 사용됩니다.

깁스

한 유형의 변수 값을 다른 유형으로 변환해야 하는 경우가 종종 있습니다. 원래 유형의 값 집합이 더 큰 유형의 하위 집합인 경우(예: int는 long의 하위 집합이고 long은 double임) 컴파일러는 암시적으로( 암묵적으로) 값 유형을 변경합니다.

정수 = 2; 부동 부동 = 정수; // 부동 = 2.0

정보가 손실된 상태에서 역방향 캐스팅이 수행되므로 부동 소수점 숫자의 정수 부분만 남고 소수 부분은 손실됩니다.

명시적인 유형 변환 가능성이 있습니다. 이를 위해 변수 왼쪽이나 원래 유형의 값에 캐스트가 수행될 유형을 괄호 안에 작성하십시오.

정수 값 = (int) 2.5;

단항 및 이항 연산

이전에 수행한 연산을 이진 연산이라고 합니다. 연산 기호의 왼쪽과 오른쪽에는 값 또는 변수(예: 2 + 3)가 있습니다. 프로그래밍 언어에서는 이진 연산 외에도 변수에 적용되는 단항 연산도 사용합니다. . 변수의 왼쪽이나 오른쪽에 위치할 수 있습니다. 이러한 작업은 이전에 여러 번 발생했습니다. 역참조 작업(*)과 변수의 주소를 가져오는 작업(&)은 단항입니다. 연산자 “++”와 “—”는 정수 변수의 값을 각각 1씩 증가 및 감소시키며 변수의 왼쪽이나 오른쪽에 쓸 수 있습니다.

C++에서는 표현식의 왼쪽과 오른쪽에 동일한 변수가 포함된 경우 이진 연산에 대한 약칭 표기법도 사용합니다. 변수 값에 대해 일부 작업이 수행되고 작업 결과가 동일한 변수에 저장됩니다.

A += 2; // a = a + 2와 동일; b /= 5; // b = b / 5와 동일; c &= 3; // c와 동일 = c & 3;