ruz   4년 전

19자리 입력이기에 unsigned long long 을 사용해서 문제를 풀었습니다만..

다른 분들의 long long 을 사용한 코드가 9.9999e18 등의 입력에서도 잘 동작하는 것을 보고 충격을 먹어 질문드립니다.

long long 자료형을 선언하고 %lld로 입력을 받더라도 입력받은 수가 (1<<63)-1 을 넘어가면 unsigned long long 자료형으로 바뀌기라도 하는 것인가요?

아니면 비트가 같은 (예를들어 -9,223,372,036,854,775,808‬과 9,223,372,036,854,775,808) 수들은 자료형에 관계없이 항상 같은 수라고 보는 것인가요?

bupjae   4년 전

그런 프로그램들의 실행 결과는 정의되지 않았습니다. (undefined behavior)

다만, (long long)-9223372036854775808 과 (unsigned long long)+9223372036854775808 이 "우연히" 같은 bit-pattern 으로 이루어져 있고.

대부분의 프로그램들이 bit-pattern 를 이용하는 알고리즘을 사용하고 있기 때문에

"우연히" 올바른 동작을 하는 것 뿐입니다.

댓글을 작성하려면 로그인해야 합니다.