아하
검색 이미지
생활꿀팁 이미지
생활꿀팁생활
생활꿀팁 이미지
생활꿀팁생활
은혜로운왈라비232
은혜로운왈라비23219.05.23

C/ 서로 다른 변수 type간 비교에서 어느 쪽 변수로 기준이 되는지 알고 싶습니다.

C/ 서로 다른 변수 type간 비교에서 어느 쪽 변수로 기준이 되는지 알고 싶습니다.

int v_max(int x, int y){

int x, int y;

int64_t tex_iter = (int64_t)x*y;

return tex_iter == (int)tex_iter;

}

마지막 라인 비교는 64비트 크기 정수와 32 비트 정수를 비교하는데 이 경우 형태가 큰 쪽에 맞추는 건가요?

55글자 더 채워주세요.
답변의 개수
2개의 답변이 있어요!
  • 64비트 정수와 32비트 정수를 비교할 때 타입을 32비트로 통일하면 64비트 정수의 값이 손실될 수 있지만
    64비트로 통일해서 비교하면 32비트를 64비트로 바꾸면서 값 손실이 일어나지 않습니다.

    작은 쪽으로 통일하면 문제가 발생할 수 있기 때문이 큰 쪽에 맞춥니다.

    정수형끼리, 부동소수점끼리 비교할 때는 크기가 큰 쪽에 맞추고 (크기가 큰 쪽이 표현 범위가 더 넓습니다.)
    정수형과 부동소수점을 비교할 때는 (어차피 부동소수점은 정확하지 않기 때문에) 부동소수점으로 맞춥니다.


  • 모든 연산은 형태가 큰 변수에 맞추어 계산합니다. 비교 연산도 연산의 일종이므로 동일한 원칙이 적용됩니다.

    tex_iter == tex_iter 은 그러니까 (int)tex_iter 을 (int64_t)( (int)tex_iter ) 로 캐스팅한 다음에 tex_iter 과 비교하는 식이 됩니다.

    의도는 int 두 개를 곱셈했을 때 int 범위에서 overflow가 발생하는 지 확인하고자 하는 것 같네요.

    감사합니다.