C++암시 적 전환 문제 분석 및 해결 방법

2068 단어 C++암시 적 변환
우 리 는 먼저 실례 코드 를 살 펴 보 자.

#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
int main()
{
  unsigned int a;
  int b = -1;
  while (cin >> a)
  {
    if (a > b)
    {
      cout << "a > b" << endl;
    }
    else if (a < b)
    {
      cout << "a < b" << endl;
    }
    else
    {
      cout << "a == b" << endl;
    }
    
  }
  return 0;
}

설명:
산술 연산 이나 관계 연산 의 연산 대상 이 여러 가지 유형 이 있다 면 같은 유형 으로 전환 해 야 한다.
이것 은 기호 가 없 는 연산 대상 과 관련된다.
만약 어떤 연산 자의 연산 대상 이 일치 하지 않 는 다 면,이 연산 대상 들 은 같은 유형 으로 변 환 될 것 이다.그러나 특정한 연산 대상 의 유형 이 기호 가 없 는 유형 이 라면 전환 결 과 는 기계 의 각 정수 유형 에서 각 정수 유형의 상대 적 인 크기 에 의존 해 야 한다.
여느 때 처럼 먼저 정형 향상 을 실시한다.결과 의 유형 이 일치 하면 더 이상 전환 할 필요 가 없습니다.만약 에 두 개의 연산 대상 의 유형 이 모두 기호 가 있 거나 모두 기호 가 없 으 면 작은 유형의 연산 대상 이 비교적 큰 유형 으로 전환 된다.
만약 에 하나의 연산 대상 이 기호 가 없 는 유형 이 고 다른 연산 대상 이 기호 가 있 는 유형 이 며 그 중의 기호 가 없 는 유형 이 기호 가 있 는 유형 보다 작 지 않 으 면 기 호 를 가 진 연산 대상 은 기호 가 없 는 것 으로 전환한다.위의 프로그램의 unsigned int 와 int 와 같이 int 형식의 연산 대상 은 unsigned int 형식 으로 변 환 됩 니 다.만약 int 형의 값 이 마이너스 라면 unsigned int 의 수치 총수 로 변 환 됩 니 다.a예 를 들 어 8 비트 크기 의 unsigned char 는 0 에서 255 구간 내의 값 을 표시 할 수 있 습 니 다.만약 에 우리 가 한 구간 이외 의 값 을 부여 하면 실제 결 과 는 이 값 이 256 모델 을 추출 한 후에 얻 은 나머지 입 니 다.따라서-1 을 8 비트 크기 의 unsigned char 에 부여 한 결 과 는 255 이다.
나머지 한 가지 상황 은 기호 유형 이 기호 유형 이 없 는 것 보다 크다 는 것 이다.이때 전환 한 결 과 는 기계 에 의존 되 고 기호 유형 이 없 는 모든 값 이 이 기호 유형 에 존재 할 수 있다 면 기호 유형의 연산 대상 이 없 는 기호 유형 으로 전환 된다.만약 안 된다 면,기호 형식의 연산 대상 을 부호 가 없 는 유형 으로 변환 합 니 다.
여기 서 C++암시 적 전환 문제 분석 및 해결 방법 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 C++에서 발 견 된 암시 적 전환 문제 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기