C++에서 할당 연산 자 와 쉼표 연산 자의 용법 에 대한 상세 한 설명

할당 연산 자
할당 기호'='은 할당 연산 자 입 니 다.데 이 터 를 변수 에 부여 하 는 역할 을 합 니 다.예 를 들 어'a=3'의 역할 은 할당 작업(또는 할당 연산)을 수행 하 는 것 이다.상수 3 을 변수 a 에 부여 하 다.표현 식 의 값 을 변수 에 부여 할 수도 있 습 니 다.
할당 과정 에서 의 형식 변환
할당 연산 자 양쪽 의 유형 이 일치 하지 않 지만 모두 수치 형 이나 문자 형 일 경우 할당 할 때 자동 으로 형식 변환 을 합 니 다.
1)  부동 소수점 데이터(단일,이중 정밀도 포함)를 정형 변수 에 부여 할 때 소수 부분 을 버 립 니 다.
2)  정형 데 이 터 를 부동 소수점 변수 에 부여 할 때 수 치 는 변 하지 않 지만 지수 형식 으로 변수 에 저장 합 니 다.
3)double 형 데 이 터 를 float 변수 에 부여 할 때 수치 범위 가 넘 치지 않도록 주의해 야 한다.
4)  문자 형 데 이 터 는 정형 변수 에 부여 하고 문자 의 ASCII 코드 를 정형 변수 에 부여 합 니 다.
5)int,short 또는 long 형 데 이 터 를 char 형 변수 에 부여 하고 8 비트 낮 게 char 형 변수 에 만 그대로 보 냅 니 다(차단 발생).예컨대
  

short int i=289;
  char c;
  c=i; //   int       char   
할당 상황 은 그림 참조.편리 함 을 위해 하나의 int 형 데이터 가 두 바이트(16 비트)를 차지 하 는 상황 으로 설명 한다.

6)sign(기호 가 있 음)형 데 이 터 를 길이 가 같은 unsigned(기호 가 없 음)형 변수 에 부여 하고 저장 장치 의 내용 을 그대로 옮 깁 니 다(기 존의 기호 비트 도 수치 로 전송 합 니 다).
【예】기호 가 있 는 데 이 터 를 기호 가 없 는 변수 에 전송 합 니 다.

#include <iostream>
using namespace std;
int main( )
{
 unsigned short a;
 short int b=-1;
 a=b;
 cout<<"a="<<a<<endl;
 return 0;
}
실행 결과

a=65535
b 에 게 부여 한 값 은-1 입 니 다.어떻게 65535 를 얻 을 수 있 습 니까?그림 에서 보 여 준 할당 상황 을 보십시오.

-1 의 패 치 형식 은 1111111111111111(즉,전체 16 개의 바 이 너 리 는 모두 1)로 a 에 전송 하고 a 는 기호 형 변수 가 없 으 며 16 개의 비트 는 모두 10 진법 의 65535 이다.b 가 플러스 이 고 0~32767 사이 에 있 으 면 할당 후 수치 가 변 하지 않 습 니 다.
서로 다른 유형의 정형 데이터 간 의 대 가 는 결국 하나의 것 이다.저장 장치 의 저장 형식 에 따라 직접 전송 하 는 것 이다.
C 와 C++는 유연 하 게 사용 되 고 서로 다른 유형의 데이터 사이 에 값 을 부여 할 때 예상 치 못 한 결과 가 자주 발생 하지만 컴 파일 시스템 은 실 수 를 제시 하지 않 고 프로그래머 의 경험 으로 문 제 를 찾아낸다.이 는 프로그래머 들 이 고장 을 신속하게 제거 하기 위해 문제 가 발생 한 원인 에 대해 알 아야 한다.
복합 할당 연산 자
할당 부호'='전에 다른 연산 자 를 더 하면 복합 연산 자 를 구성 할 수 있다.'='앞 에'+'연산 자 를 추가 하면 복합 연산 자'+='이 됩 니 다.있다
  •     a+=3  등가  a=a+3
  •     x*=y+8 등가  x=x*(y+8)
  •     x%=3  등가  x=x%3
  • 'a+=3'을 예 로 들 면 a 를 한 번 에 3 을 추가 하 는 작업 을 하 게 하 는 것 과 같다.즉,먼저 a 에 3 을 더 한 다음 에 a 에 게 부여 하 는 것 이다.마찬가지 로'x*=y+8'의 역할 은 x 곱 하기(y+8)를 x 에 부여 하 는 것 이다.
    기억 에 편리 하도록 이렇게 이해 할 수 있다.
  • a+=b(그 중 a 는 변수 이 고 b 는 표현 식)
  • a+=b(밑줄 친'a+'를'='오른쪽으로 이동)
  • a = a + b  ("="왼쪽 에 변수 이름 a 를 추가 합 니 다.
  • b 가 여러 항목 을 포함 하 는 표현 식 이 라면 괄호 가 있 는 것 과 같 습 니 다....와 같다
  • x %= y+3
  • x %= (y+3)
  • x=x%(y+3)(x=x%y+3)
  • 이원(2 목)연산 자 는 모두 할당 부호 와 함께 복합 할당 부호 로 조합 할 수 있다.C++는 다음 과 같은 몇 가지 복합 할당 연산 자 를 사용 할 수 있 습 니 다.
       
    
    +=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=
    
    그 중 후 5 가 지 는 위치 연산 에 관 한 것 이다.
    C++이런 복합 연산 자 를 사용 하 는 이 유 는 첫째,절 차 를 간소화 하고 프로그램 을 정련 시 키 기 위해 서 이다.둘째,컴 파일 효율 을 높이 기 위해 서 이다.(이렇게 쓰 는 방법 은'역 폴란드'식 과 일치 하고 컴 파일 에 유리 하 며 질 이 높 은 목표 코드 를 만 들 수 있다)전문 적 인 프로그래머 들 은 프로그램 에서 복합 연산 자 를 자주 사용 하 는데 초보 자 들 은 익숙 하지 않 을 수도 있 고 사용 하지 않 거나 적 게 사용 할 수도 있다.
    할당 식
    할당 연산 자 에서 하나의 변수 와 표현 식 을 연결 하 는 식 을'할당 표현 식'이 라 고 합 니 다.그것 의 일반적인 형식 은:
    
      <  > <     > <   >
    
    예 를 들 어'a=5'는 할당 표현 식 입 니 다.값 표현 식 에 대한 해답 을 구 하 는 과정 은 값 연산 자 오른쪽 에 있 는'표현 식'의 값 을 구하 고 값 연산 자 왼쪽 에 있 는 변 수 를 부여 하 는 것 입 니 다.표현 식 에 값 이 있어 야 합 니 다.할당 연산 자 왼쪽 에 있 는 식별 자 를'왼쪽 값'(left value,lvalue 로 약칭)이 라 고 합 니 다.모든 대상 이 왼쪽 값 으로 할 수 있 는 것 이 아 닙 니 다.변 수 는 왼쪽 값 으로 할 수 있 습 니 다.표현 식 a+b 는 왼쪽 값 으로 할 수 없고,상 변 수 는 왼쪽 값 으로 할 수 없습니다.상 변 수 는 할당 할 수 없 기 때 문 입 니 다.
    할당 연산 자 오른쪽 에 나타 나 는 표현 식 을'오른쪽 값'(right value,rvalue 로 간략화)이 라 고 합 니 다.분명히 왼쪽 값 도 할당 연산 자 오른쪽 에 나타 날 수 있 기 때문에 왼쪽 값 은 모두 오른쪽 값 으로 할 수 있다.예:
    
      int a=3,b,c;
      b=a;// b   
      c=b;// b    
    
    할당 식 의'표현 식'은 할당 식 일 수도 있 습 니 다....와 같다
    
      a=(b=5)
    
    다음은 할당 식 의 예 입 니 다:
    
     a=b=c=5 (       5,a,b,c   5)
     a=5+(c=6)(     11,a  11,c  6)
     a=(b=4)+(c=6) (     10,a  10,b  4,c  6)
     a=(b=10)/(c=2) (     5,a  5,b  10,c  2)
    
    
    아래 의 할당 표현 식 을 분석 하 십시오:
    
      (a=3*5)=4*3
    
    할당 식 은 왼쪽 값 으로 괄호 를 넣 어야 합 니 다.아래 로 쓰 면 문법 오류 가 발생 합 니 다.
    
      a=3*5=4*3
    
    3*5 는 왼쪽 값 이 아니 기 때문에 할당 연산 자의 왼쪽 에 나타 날 수 없습니다.
    할당 식 도 복합 할당 연산 자 를 포함 할 수 있 습 니 다....와 같다
    
      a+=a-=a*a
    
    할당 식 이기 도 합 니 다.a 의 초기 값 이 12 라면 이 할당 식 의 풀이 절 차 는 다음 과 같 습 니 다.
    먼저"a-=a*a"의 연산 을 진행 합 니 다.이것 은 a=a-a*a=12-144=-132 에 해당 합 니 다.
    다시"a+=-132"의 연산 을 진행 하면 a=a+(-132)=-132-132=-264 에 해당 한다.
    C++쉼표 연산 자 와 쉼표 표현 식
    C++는 할당 표현 식 을 표현 식 의 하나 로 하여 할당 작업 을 할당 문 에 나타 날 수 있 을 뿐만 아니 라 표현 식 으로 다른 문(예 를 들 어 출력 문,순환 문 등)에 나타 날 수 있 습 니 다.이것 은 C++언어의 유연성 을 나타 내 는 표현 이다.
    "cout<C++는 특수 한 연산 자―쉼표 연산 자 를 제공 합 니 다.그것 으로 두 표현 식 을 연결 합 니 다....와 같다
    
      3+5, 6+8
    
    쉼표 표현 식 이 라 고도 부 르 며'순서 값 연산 자'라 고도 부른다.쉼표 식 의 일반적인 형식 은:
    
         1,    2
    
    쉼표 식 의 풀이 과정 은 표현 식 1 을 먼저 풀 고 표현 식 2 를 푸 는 것 입 니 다.전체 쉼표 표현 식 의 값 은 표현 식 2 의 값 입 니 다.쉼표 식
    
      a=3*5, a*4
    
    할당 연산 자의 우선 순 위 는 쉼표 연산 자 보다 높 기 때문에 a=3*5(즉,'a=3*5'를 표현 식 으로 하 는 것)를 먼저 풀 어야 합 니 다.계산 과 할당 을 거 친 후에 a 의 값 을 15 로 얻 은 다음 에 a*4 를 풀 면 60 이 됩 니 다.전체 쉼표 표현 식 의 값 은 60 이다.
    하나의 쉼표 표현 식 은 또 다른 표현 식 과 새로운 쉼표 표현 식 을 구성 할 수 있다.예 를 들 어
    
      (a=3*5, a*4), a+5
    
    쉼표 식 의 일반적인 형식 은 다음 과 같이 확장 할 수 있 습 니 다.
    
         1,    2,    3, …,    n
    
    그것 의 값 은 표현 식 n 의 값 입 니 다.
    쉼표 연산 자 는 모든 연산 자 중에서 등급 이 가장 낮다.따라서 다음 두 표현 식 의 역할 은 다르다.
    
      x=(a=3, 6*3)
      x=a=3, 6*a
    
    사실,쉼표 표현 식 은 단지 몇 개의 표현 식 을'직렬'로 연결 하 는 것 일 뿐이다.많은 경우 에 쉼표 표현 식 을 사용 하 는 목적 은 각 표현 식 의 값 을 각각 얻 으 려 는 것 일 뿐 전체 쉼표 표현 식 의 값 을 얻 고 사용 해 야 하 는 것 이 아니 라 쉼표 표현 식 은 순환 문(for 문)에 가장 많이 사용 된다.
    콤마 표현 식 의 값 을 cout 로 출력 할 때 다음 과 같이 괄호 로 묶 어야 합 니 다.
    
      cout<<(3*5, 43-6*5, 67/3)<<endl;
    
    C 와 C++언어 표 현 력 이 강하 다.그 중 하 나 는 표현 식 유형 이 풍부 하고 연산 자 기능 이 강하 기 때문에 사용 이 유연 하고 적응성 이 강하 다 는 것 이다.

    좋은 웹페이지 즐겨찾기