아하
검색 이미지
생활꿀팁 이미지
생활꿀팁생활
생활꿀팁 이미지
생활꿀팁생활
순수한벌잡이242
순수한벌잡이24220.10.05

C언어 캐스트 연산자 출력에 대해 질문 드립니다

#include <stdio.h>int main() {int a = 7;int b = 3;double div = a/b;printf("%d / %d = %f\n" ,a, b, div);return 0;}

이 프로그램을 수정하려는데 답이 5번째 줄 a/b 앞에 (double)을 붙이는거더라구요 혹시 float나 . 을 붙이면 안되는건가요?

꼭 double만 붙여야하는건가요? 아 그리고 왜 double에 괄호를 쓰는지도 궁금합니다

자세히 알려주시면 감사하겠습니다

55글자 더 채워주세요.
답변의 개수6개의 답변이 있어요!
  • int형의 범위는 32bit 정수형으로 –2,147,483,648 ~ 2,147,483,647까지입니다.

    double형의 범위는 64bit 실수형으로 -1.8 x 10^308 ~ 1.8 x 10^308의 범위를 갖습니다.

    이말은 int형일때는 정수/정수 는 정수가 나오니 제대로된 나눗셈 결과를 갖지 못할 것입니다.

    예로 10/3 = 3 으로 나올 겁니다. 원하는 답은 3.33333333333이런답인데 말이죠

    따라서 double형으로 바꿔주기 위해서

    double div = (double) a/b;

    이런식의 형변환이 필요합니다.

    float형으로 바꿔줄 수 있습니다. float형으로 형변환 할 시에는 double보다는 정밀도가 낮을 뿐입니다.


  • 실행해보면 float을 사용해도 문제가 없습니다.

    float과 double의 차이점은 표현할 수 있는 정밀도의 차이입니다.

    출력에서 이미 %f를 하였기 때문에 float을 써도 무방해보입니다.

    printf("%d / %d = %f\n" ,a, b, div);

    괄호를 사용하는 것은 어떠한 것으로 타입을 변하겠다는 의미 입니다.

    괄호가 없으면 변수를 선언하는 것이 될 수도 있기 때문에 문법 오류가 발생합니다.

    (double)을 사용하고 싶지 않다면 a, b 변수 둘중 하나를 double 선언하면 됩니다.


  • 안녕하세요.

    인라인으로 답변 드립니다.

    이 프로그램을 수정하려는데 답이 5번째 줄 a/b 앞에 (double)을 붙이는거더라구요 혹시 float나 . 을 붙이면 안되는건가요?

    이 경우에는 실수연산만 하면 되니 float를 붙여도 상관없습니다..

    꼭 double만 붙여야하는건가요? 아 그리고 왜 double에 괄호를 쓰는지도 궁금합니다

    자세히 알려주시면 감사하겠습니다

    double에 ()표시는 하는것은 C언어의 규칙입니다. 기존의 자료형과 다른 자료형으로 변경하는 경우를 casting이라 하고, casting시에는 (자료형) 으로 쓰는 것이 약속입니다.

    감사합니다.


  • double 은 8byte

    float 은 4byte 입니다

    즉 표현할수 있는 실수형 수치는 double이 float 형보다 2배가 더 많다는것이구요

    저 문제에서 double 이 정답인 이유는

    7/3 을 할경우 값이 2.3333333333333333333333333333333333333333333333333333333333333

    이렇게 끝없이 이루어져 있기때문에 double을 사용한것입니다

    만약 어떤 프로그래밍 할때 끝없는 실수이지만 실제적으로 사용되는게 소숫점 몇자리밖에 안된다면?

    double대신 float 을 사용해도 무방합니다


  • 위의 프로그램에서 자료형으로 double를 쓰는 이유는 float보다 더 많은 표현을 위해서라고 보입니다.

    float 자료형보다 double가 소숫점을 더 표현할 수 있기 때문이구요. 소숫점이 길게 표현되지 않는다면 double 대신 float를 쓰셔도 됩니다. 그리고 .은 변수 자료형이 아니므로 오류가 나지 않을까 싶습니다.

    아니면 출력시 .을 쓰시는 것이라면 안될 가능성이 높아보입니다.

    그리고 질문에 double에 괄호를 쓴다고 되어 있는데 (double) div = a/b; 이렇게 되어 있다면 실제 코딩 후 실행하면 오류가 뜨지 않을까 싶습니다. 보기에는 교재에서 답을 표현하기 위해서 괄호를 쓴게 아닐까 생각됩니다.


  • 1. double 형 사용 이유.

    float과 double의 차이는 표현할 수 있는 실수가 얼마나 정밀한가 입니다.

    float보다 double은 더 많은 소숫점을 표현하여 계산할 수 있으며, 아무래도 더 정밀한 double을 사용하여 계산하는 것이 소수점에 대한 오차가 적어지게 됩니다.

    수학에서 무한한 수의 계산이 당연하지만 컴퓨터는 무한이라는 개념을 표현하기 힘들고, 유한한 숫자의 계산을 하기 때문에 근사값으로 표현하게 됩니다.

    즉 표현할 수 있는 소수점이 얼마나 많은지에 따라 오차범위가 줄어들고 더 정밀한 계산이 되어지는 것 입니다.

    2. (double) 의미

    int형 a,b를 나누어 double형 div 변수에 저장하는 경우 나누기의 소수점의 값까지 구하려면 double형으로 캐스팅을 해야 합니다. 이를 명시하는 구문이 (double) 됩니다.

    그렇게 하지 않으면, 소수점의 값이 없는 결과 값만 div 변수에 저장되게 됩니다.

    좀더 설명 드리자면 a나누기 b의 경우 정수 나누기 정수로 컴퓨터는 정수의 결과 값만 반환하게 됩니다. 소수의 결과값을 얻기 위해서는 a와 b둘중에 하나라도 형변환을 통해 소수로 변경 하거나 상수뒤에 .0 을 붙여서 소수라고 명시해 주어야 합니다.

    즉 a/b의 앞에 (double)을 붙임으로써 int형 a를 double형으로 형변환을 진행한 후 나누기를 시행하게 되며 결과값으로 소수의 형태로 반환하게 됩니다.