long 형

하하의 이미지

아래 코드가 제대로 안찍히는 이유를 설명해 주실분

^^:;

main()
{
        long y;

        unsigned long long int x;


        y = 1129622404;
        x = y * 1000;

        printf("'%d'\n", y);
        printf("'%lld'\n", x);

}
익명 사용자의 이미지

x = (unsigned long long)y * 1000;
...
printf("'%llu'\n", x);

로 고치면 제대로 찍히네요.

x = y * 1000 에서 overflow 가 난 결과가 저장되는 듯 합니다..

tinywolf의 이미지

흠.. 그렇겠군요..
일단 둘다 long이니 연산에서 임시로 long에다가 계산 결과를 저장하여 overflow가 날 테고..
그걸 다시 long long으로 저장하겠군요..
둘 중 하나라도 먼저 형변환 해준다면 임시로 long long에다가 계산해 줄테니 해결!
아니면 아래와 같은 방법도 OK!

x = y;
x *= 1000;

ㅡ_ㅡ;

ironboy의 이미지

x = y * 1000LL;
...
printf("'%llu'\n", x);

이렇게 해도 바른 결과가 찍히는 군요.
이유는 위의 설명대로인듯 합니다.
적어두.. 개산되는 하나의 변이 longlong이 되어야 하는 모양이군요.

익명 사용자의 이미지

printf("%Lu",ll);
아닌가요?

cppig1995의 이미지

하하 wrote:
printf("'%d'\n", y);

printf("\'%ld\'\n", y);

PS.

int main() 과 int main(int, char **) 이외의 main 형식은
ISO/IEC 9899:1999 (약칭 C99) 에서 보장하지 못합니다.

Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.