사용자가 32bit 운영체제 쓴다는 가정을 기반으로 작성된 코드인데,
코드를 보면 변수 초기 선언이 unsigned로 한 것들이 있어서, 이건 64bit에서도 돌아가겠다 이해가됨
그런데 상수값이 그냥 0x00000001 같이 32bit로 짜여진 것도 포함되어 있는데,
컴파일 멀쩡하게 되고 실행도 잘됨;; 혼자 짱구를 아무리 굴려봐도 두가지 이유밖에 안떠오름
1. 상수도 unsigned처럼 자동으로 빈 자리는 0으로 채워진다.
2. 64bit 운영체제 자체에 그냥 하위 호환성이 있다.
어느게 맞나요? 둘 다 틀렸으면 정답도 굽신굽신...
2
32비트로 컴파일하고서 그러는 거임?
1번은 틀린 건가요?
사용자가 16bit 운영체제를 쓴다는 가정을 기반으로 작성된 코드인데, 상수 값이 0x0001 같이 16비트로 짜여진 것도 포함되어 있는데 컴파일 멀쩡하고 버그도 없음. 따라서, 상수의 빈자리는 0으로 채워지거나 그냥 하위 호환성이 있다. ㅎㅎㅎ 글쎄, 0x0000000000000001 = 0x01 = 1 인뎁쇼.
ㄴㄴ 컴파일 설정 아무것도 안주고 64bit 운영체제에서 그냥 컴파일
뭐,이런건가?//상수도 컴터는 unsigned처럼 처리한다는 말씀인가요? 대가리가 짱구라 ㅠ
상수는 파스 타임에 처리가 되는데 왜 런타임을 고민함? 32비트에서는 오버플로가 안나는데, 64비트로 가면 오버플로가 나는 상수도 있나?
1번이 그나마 가깝습니다. 고갱님.
115.23횽 고마워요!
int 말고는 운영체제에 관계없이 할당 비트수가 일정하잖아. short는 2바이트, long은 4바이트, long long은 8바이트... int형 오버플러를 이용한 코드나 비트연산을 쓰지않는 이상에는 별 문제 없을꺼야.
32bit로 빌드된 파일을 64bit에서 구동할 때 터지는건 내가 대학을 못 갔기에 잘 모르겠다.