산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

C++ 변수 및 유형:int, double, char, string, bool

C++의 변수

C++ 변수는 명명된 저장 기능을 제공합니다. 그것은 프로그래머가 필요에 따라 데이터를 조작할 수 있습니다. 모든 변수에는 C++의 유형이 있습니다. 변수 유형은 변수 메모리 맵의 크기와 레이아웃, 해당 메모리에 저장할 수 있는 값 범위, 적용할 수 있는 작업 집합을 결정하는 데 도움이 됩니다.

이 C++ 자습서에서는 다음을 배우게 됩니다.

C++의 기본 변수 유형

C++ 변수의 기본 유형은 다음과 같습니다.

정수:

정수는 분수 또는 지수 부분이 없는 숫자 리터럴(숫자와 연결됨)입니다. 예시. 120, -90 등

더블:

배정밀도 부동 소수점 값입니다. 예:11.22, 2.345

문자:

문자 리터럴은 작은따옴표 안에 단일 문자를 묶어서 만듭니다. 예:'a', 'm', 'F', 'P', '}' 등

플로트:

부동 소수점 리터럴은 분수 형식이나 지수 형식이 있는 숫자 리터럴입니다. 예:1.3, 2.6

문자열 리터럴:

문자열 리터럴은 큰따옴표로 묶인 일련의 문자입니다. 예:"안녕하세요?"

부울:

부울 값을 true 또는 false로 유지합니다.

C++에서 변수 선언 규칙

다음은 변수 이름 지정에 대한 몇 가지 일반적인 규칙입니다.

C++ 변수 데이터 유형

C++는 전체 기본 유형 세트를 정의합니다.

무효 type에는 연관된 값이 없으며 몇 가지 상황에서만 사용할 수 있습니다. 값을 반환하지 않는 함수의 반환 유형으로 가장 일반적입니다.

산술 유형 문자, 정수, 부울 값 및 부동 소수점 숫자를 포함합니다. 2개의 범주로 더 나누면 산술 유형

  1. 부동 소수점 유형 . float(또는 float 유형)은 10진수를 나타냅니다. IEEE 표준은 최소 유효 자릿수를 지정합니다. 대부분의 컴파일러는 일반적으로 지정된 최소값보다 더 높은 정밀도를 제공합니다. 일반적으로 float는 32비트로, double은 64비트로, long double은 96 또는 128비트로 표시됩니다.
  2. 적분 유형 (문자, 정수 및 부울 유형 포함). 부울 type에는 True 또는 False의 두 가지 유형의 값만 있습니다. 여러 문자가 있습니다. 대부분이 국제화를 지원하기 위해 존재합니다. 가장 기본적인 문자 유형은 char입니다. 문자는 단일 바이트를 의미하는 단일 머신 바이트와 크기가 같습니다.

적분 유형 서명되거나 서명되지 않을 수 있습니다.

서명된 유형 :음수 또는 양수(0 포함)를 나타냅니다. 부호 있는 유형에서 범위는 +ve와 -ve 값 사이에 균등하게 나누어져야 합니다. 따라서 8비트 부호 있는 문자는 -127에서 127 사이의 값을 보유합니다.

서명되지 않은 유형 :unsigned 유형에서 모든 값은>=0입니다. 8비트 unsigned char에는 0에서 255(둘 다 포함)가 포함될 수 있습니다.

변수 이름 또는 식별자

식별자는 일부 문자, 숫자 및 밑줄 문자 또는 이들의 조합으로 구성될 수 있습니다. 이름 길이에는 제한이 없습니다.

식별자는

// 4개의 다른 int 변수를 정의합니다.

int guru99, gurU99, GuRu99, GURU99;

C++ 언어는 사용을 위해 일부 이름을 예약했습니다.

다양한 프로그래밍 언어에서 변수 이름을 지정하는 데 허용되는 규칙이 많이 있습니다. 이러한 규칙을 따르면 프로그램의 가독성을 높일 수 있습니다.

C++ 변수 선언 및 정의

변수 선언은 변수가 정의된 범위에서 프로그램에 이름을 알려줍니다. 예:

int a=5;
int b;
char c='A'; 
int a,b;
a=b=1000;
List initialization
int a(5);
int b{5};

C++의 Const 한정자

사용자로부터 가져올 입력 수를 나타내는 변수 버프 크기가 ​​있다고 가정합니다. 여기서 우리는 프로그램 전체에서 버프 크기의 값을 변경하고 싶지 않습니다. 우리가 알고 있는 값이 변경되어서는 안 되는 변수를 정의하고 싶습니다.

이 경우 키워드 const

를 사용하십시오.
const int bufSize = 512;    // input buffer size

이것은 bufSize를 상수로 정의합니다. bufSize를 할당하거나 변경하려고 하면 오류가 발생합니다.

여기서 const 객체를 생성한 후에는 값을 변경할 수 없으며 반드시 선언하고 초기화해야 합니다. 그렇지 않으면 컴파일러에서 오류가 발생합니다.

const int i = get_size();  // ok: initialized at run time
const int j = 42;          // ok: initialized at compile time
const int k;               // error: k is uninitialized const
int i = 42;
const int ci = i;    	   // ok: the value in i is copied into ci 

C++의 변수 범위

범위는 변수에 의미가 있는 프로그램의 범위입니다. 대부분 동일한 이름을 사용하여 다른 범위 내의 다른 엔터티를 참조할 수 있습니다. 변수는 선언된 지점부터 해당 선언이 나타나는 범위의 끝까지 볼 수 있습니다.

#include <iostream>	
int main()	
{	
    int sum = 0;	
    // sum values from 1 through 10 inclusive	
    for (int val = 1; val <= 10; ++val)	
        sum += val;  // equivalent to sum = sum + val	
    cout << "Sum of 1 to 10 inclusive is "<< sum <<endl;	
    return 0;	
}	 

이 프로그램은 viz, main, sum 및 val의 3가지 이름을 정의합니다. std라는 네임스페이스 이름과 해당 네임스페이스의 다른 두 이름인 cout 및 endl을 사용합니다.

중첩 범위

범위는 다른 범위를 포함할 수 있습니다. 포함된(또는 중첩된) 범위를 내부 범위라고 합니다. 포함 범위가 외부 범위입니다.

#include <iostream>	
using namespace std;	
// Program for illustration purposes only: It is bad style for a function	
// to use a global variable and also define a local variable with the same name	
int reused = 42;  // reused has global scope	
int main()	
{	
    int unique = 0; // unique has block scope	
    // output #1: uses global reused; prints 42 0	
    cout << reused << " " << unique << endl;	
    int reused = 0; // new, local object named reused hides global reused	
    // output #2: uses local reused; prints 0 0	
    cout << reused << " " << unique << endl;	
    // output #3: explicitly requests the global reused; prints 42 0	
    cout << ::reused << " " << unique << endl;	
    return 0;	
}	 

출력 #1 재사용의 지역 정의 앞에 나타납니다. 따라서 이 출력

문은 전역 범위에서 정의된 재사용된 이름을 사용하는 문입니다. 이 문은

를 출력합니다.

42 0

출력 #2 재사용의 로컬 정의 후에 발생합니다. 이제 범위 내에 있습니다. 따라서 이 두 번째 출력 문은 전역 개체가 아닌 재사용이라는 이름의 로컬 개체를 사용하여 출력합니다.

0 0

출력 #3 범위 연산자를 사용하여 기본 범위 지정 규칙을 재정의합니다. 전역 범위에는 이름이 없습니다. 따라서 범위 operator(::)의 왼쪽이 비어 있을 때. 전역 범위의 오른쪽에 있는 이름을 가져오라는 요청으로 해석합니다. 따라서 표현식은 전역 재사용 및 출력을 사용합니다.

42 0

변수 유형 변환

한 유형의 변수는 다른 유형으로 변환될 수 있습니다. "유형 변환"이라고 합니다. 다양한 C++ 변수 유형을 변환하는 규칙을 살펴보겠습니다.

bool이 아닌 변수를 bool 변수에 할당하면 값이 0이면 false가 되고 그렇지 않으면 true가 됩니다.

bool b = 42;            // b is true

다른 산술 유형 중 하나에 bool을 할당하면 bool이 참이면 1이, 거짓이면 0이 됩니다.

bool b = true;
int i = b;              // i has value 1

int 유형의 변수에 부동 소수점 값을 할당하면 값이 잘립니다. 저장되는 값은 소수점 앞부분입니다.

int i = 3.14;               // i has value 3

float 유형의 변수에 int 값을 할당하면 소수 부분이 0이 됩니다. 정수에 부동 변수가 수용할 수 있는 것보다 많은 비트가 있으면 정밀도가 일반적으로 손실됩니다.

Int i=3;
double pi = i;          // pi has value 3.0

범위를 벗어난 값을 부호 없는 유형의 변수에 할당하려고 하면 결과는 값 %(modulo)

의 나머지입니다.

예를 들어 8비트 unsigned char 유형은 0에서 255(포함)까지의 값을 보유할 수 있습니다. 이 범위 밖의 값을 할당하면 컴파일러는 나머지 값을 모듈로 256으로 할당하게 됩니다. 따라서 위의 논리에 따라 -1을 8비트 부호 없는 문자에 할당하면 해당 개체에 값 255가 부여됩니다.

unsigned char c = -1;   // assuming 8-bit chars, c has value 255

범위를 벗어난 값을 서명된 유형의 개체에 할당하려고 하면 결과를 예측할 수 없습니다. 정의되지 않았습니다. 프로그램이 외부에서 작동하는 것처럼 보이거나 충돌하거나 가비지 값을 생성할 수 있습니다.

signed char c2 = 256;   // assuming 8-bit chars, the value of c2 is undefined

컴파일러는 다른 유형의 값이 예상되는 한 유형의 값을 사용할 때 이와 동일한 유형의 변환을 적용합니다.

int i = 42;
if (i) // condition will evaluate as true
i = 0; 

이 값이 0이면 조건은 거짓입니다. 다른 모든(0이 아닌) 값은 true를 반환합니다. 같은 개념으로 산술식에서 bool을 사용하면 그 값은 항상 0 또는 1로 변환됩니다. 결과적으로 산술식에서 bool을 사용하는 것은 일반적으로 거의 틀림이 없습니다.

주의:서명된 유형과 서명되지 않은 유형을 혼합하지 마십시오.

부호 있는 값과 부호 없는 값이 혼합된 표현식은 부호 있는 값이 음수일 때 놀랍고 잘못된 결과를 생성할 수 있습니다. 위에서 논의한 바와 같이 부호 있는 값은 자동으로 부호 없는 값으로 변환됩니다.

예를 들어,

와 같은 산술 표현식에서
x* y

x가 -1이고 y가 1이고 x와 y가 모두 int이면 값은 예상대로 -1입니다.

x가 int이고 y가 부호가 없는 경우 이 표현식의 값은 정수가 컴파일 기계에 있는 비트 수에 따라 다릅니다. 우리 컴퓨터에서 이 표현식은 4294967295를 산출합니다.

변수 등록

레지스터 변수는 메모리 변수에 비해 액세스 속도가 더 빠릅니다. 따라서 C++ 프로그램에서 자주 사용되는 변수는 register를 사용하여 레지스터에 넣을 수 있습니다. 예어. register 키워드는 컴파일러에게 주어진 변수를 레지스터에 저장하도록 지시합니다. 레지스터에 넣을지 말지는 컴파일러의 선택입니다. 일반적으로 컴파일러는 일부 변수를 레지스터에 넣는 것을 포함하여 다양한 최적화를 수행합니다. C++ 프로그램에서 레지스터 변수의 수에는 제한이 없습니다. 그러나 컴파일러는 변수를 레지스터에 저장하지 않을 수 있습니다. 레지스터 메모리는 매우 제한적이며 OS에서 가장 일반적으로 사용되기 때문입니다.

정의하려면:

register int i;

댓글

주석은 컴파일러가 무시하는 코드 부분입니다. 프로그래머는 소스 코드/프로그램의 관련 영역에 메모를 작성할 수 있습니다. 주석은 블록 형식이나 한 줄로 제공됩니다. 프로그램 코멘트는 설명문입니다. C++ 코드에 포함될 수 있어 소스 코드를 읽는 데 도움이 됩니다. 모든 프로그래밍 언어는 어떤 형태의 주석을 허용합니다. C++는 한 줄 주석과 여러 줄 주석을 모두 지원합니다.

/* This is a comment */
/* C++ comments can  also 
* span multiple lines 
*/

이스케이프 시퀀스

백스페이스 및 제어 문자와 같은 일부 문자에는 이미지가 표시되지 않습니다. 이러한 문자를 인쇄할 수 없는 문자라고 합니다. 다른 문자(작은따옴표 및 큰따옴표, 물음표 및 백슬래시)는 많은 프로그래밍 언어에서 특별한 의미를 갖습니다.

우리 프로그램은 이러한 문자를 직접 사용할 수 없습니다. 대신, 우리는 이러한 문자를 나타내기 위해 이스케이프 시퀀스를 사용할 수 있습니다. 이스케이프 시퀀스는 백슬래시로 시작합니다.

C++ 프로그래밍 언어는 여러 이스케이프 시퀀스를 정의합니다.

무엇을 합니까? 캐릭터

줄 바꿈

\n

세로 탭

\v

백슬래시

\\

캐리지 리턴

\r

가로 탭

\t

백스페이스

\b

물음표

\?

폼피드

\f

경고(벨)

\a

큰따옴표

\”

작은따옴표

\'

마치 단일 문자인 것처럼 이스케이프 시퀀스를 사용합니다.

cout << '\n';        // prints a newline
cout << "\tguru99!\n";   // prints a tab followed by "guru99!" and a newline 

우리는 또한 일반화된 이스케이프 시퀀스 \x 다음에 하나 이상의 16진수 숫자를 작성할 수 있습니다. 또는 \ 다음에 1, 2 또는 3개의 8진수를 사용합니다. 일반화된 이스케이프 시퀀스는 문자의 숫자 값을 나타냅니다. 몇 가지 예(Latin-1 문자 집합 가정):

\7 (bell)    \12 (newline)      \40 (blank)
\0 (null)    \115 ('M')         \x4d ('M') 

다른 문자를 사용하는 것처럼 미리 정의된 이스케이프 시퀀스를 사용할 수 있습니다.

cout << "Hi \x4dO\115!\n";  // prints Hi MOM! followed by a newline
cout << '\115' << '\n';     // prints M followed by a newline 

요약


C 언어

  1. C# 변수 및 (기본) 데이터 형식
  2. C++ 변수, 리터럴 및 상수
  3. C++ 데이터 유형
  4. C 변수, 상수 및 리터럴
  5. C 데이터 유형
  6. C 프로그래밍의 사용자 정의 함수 유형
  7. C 스토리지 클래스
  8. 예제가 있는 C++의 연산자:정의, 유형 및 프로그램
  9. 자바 - 변수 유형
  10. C - 변수