0xffffffff >> 32 의 결과....
글쓴이: zelon / 작성시간: 화, 2004/08/31 - 11:28오후
갑자기 옆의 친구가 묻더군요...
#include <iostream> using namespace std; int main() { int range = 32; int i = 0xffffffff >> range; cout << i << endl; }
이 결과가 얼마일까요.... -_-;;
다음과 같이 테스트해보세요. >> 할 때 range 를 32 로도 해보시구요. 각각 다른 컴파일러에도 테스트해보세요.
제가 해본 바로는 값이 32, 0, -1, 가 나오는데, VC++ 6.0, .NET 2003, gcc
왜 값들이 다른걸까요... 어느 게 표준일까나요...
Forums:
저 변환식 자체가 비표준(?) 아닌가요?너무 크다고 경고가 나올것
저 변환식 자체가 비표준(?) 아닌가요?
너무 크다고 경고가 나올것 같은데..
[quote]If the value of the right opera
정의되지 않은 행동입니다.
Re: 0xffffffff >> 32 의 결과....
gcc가 아니라 g++이 맞는것 같습니다. :)
전 위 식대로 안하고 다음과 같이 했는데 이상하더군요 -_-;
(test.cpp)
결과는 32번 모두 -1이 나왔습니다. -_-;
---------------------------------------------------------------
폐인이 되자 (/ㅂ/)
lsj0713님이 인용하신 문구는 C 표준인가요?C++ 표준은 좀 다
lsj0713님이 인용하신 문구는 C 표준인가요?
C++ 표준은 좀 다르네요.
적어도 undefined는 아니로군요. :)
undefined, implementation-defined
이 두 마디의 실제적인 의미는 비슷하지 않나요?
undefined 되어 있는 행동이더라도, 구현시 그 행동에 대해서 어떤 형태로든
구현하게 될 것이고, 그것을 implementation-defined 라고 말할수 있지 않을까
싶습니다.
Re: undefined, implementation-defined
아니오, 매우 다릅니다. C 또는 C++ 표준에서 얘기하는 undefined, implementation-defined,
unspecified의 의미는 다음 링크에 잘 나와 있습니다.
http://www.embedded.com/story/OEG20020321S0014
요약하면,
- undefined: 잘못된 프로그램으로 인하여 발생하는 결과. (예: null pointer를 dereference 하는 것)
- implementation-defined: 프로그램의 잘못이 아니라 각 구현에 따라 달라질 수 있는 사항.
각 구현체의 제작자는 이러한 사항을 문서화할 의무가 있음. (예: 1바이트를 구성하는 비트 수)
- unspecified: implementation-defined와 같은 성격을 가지지만 이를 문서화할 의무는 없음.
(예: 함수 인자의 평가 순서)
댓글 달기