데이터 (번호)는 다음 문장의 필수 결과입니다 : AMAZING?c 퍼즐 (if 문)
main()
{
int data;
if(data!=0 && data==-data)
{
printf("AMAZING");
}
}
데이터 (번호)는 다음 문장의 필수 결과입니다 : AMAZING?c 퍼즐 (if 문)
main()
{
int data;
if(data!=0 && data==-data)
{
printf("AMAZING");
}
}
그것은 그 부인되면 동일하다 0 이외의 유일한 번호이기 때문에, 정수, 즉 0x80000000에가 32 비트 인 경우의 최소값 될 거라고.
#include <stdio.h>
main()
{
int data = 0x80000000;
if(data!=0 && data==-data)
{
printf("AMAZING");
}
}
결과 : 리차드 페닝 턴이 제대로 지적
AMAZING
,이 때문에 음수의 two's complement 표현의 작동합니다. 표현할 수있는 가장 큰 양수는 가장 큰 음수보다 절대 값이 작은 숫자입니다. 따라서 가장 큰 음수를 무효화하려고 시도하면 int가 오버플로되어 같은 숫자가 반환됩니다.
one's complement을 사용하는 컴퓨터의 경우 모든 표현 가능한 숫자의 음수 값도 오버플로없이 표현할 수 있으므로이 퍼즐에는 해결 방법이 없습니다.
36 비트 정수 (0x800000000)를 조정 한 후 UNIVAC 1100에서이 작업을 시도했지만 작동하지 않았습니다! –
@ 리차드 (Wikipedia for UNIVAC) : 숫자는 1의 보수로 음수 값을 갖는 바이너리였습니다. http://en.wikipedia.org/wiki/UNIVAC_1101 이렇게하면 작동하지 않습니다! 그것은 2의 보수로만 작동합니다. –
@ 마크 : 알아. 트릭 코멘트. ;-) –
정수의 크기와 정수의 구현 방법에 따라 다르지만 2의 정수가있는 2의 보수 시스템에서는 대답이 -32768입니다.
CHAR_BIT가 8이라고 가정하고 돌아가겠습니다. –
내 컴퓨터에서 정수의 크기를 알 수 없습니다. 그래서 혹시 최대 난의 최대 값을 발견
void main()
{
int i;
do{
}while(i>i++);
printf ("data=%d",i);
}
같은 INT의 값 =이 작동 데이터 -2147483648
할당이 ..
값 ('i') 대신 주소 ('& i')를 인쇄하고 있습니다. – finnw
윈도우 XP에서 윈도우 32 용 Borland C++ 5.5.1을 테스트 중입니다 – chinnagaja
예 ... 이제 실수로 이해합니다. 정말 끝내 주시면 큰 실수가됩니다. ( – chinnagaja
숙제를 찾기 위해 프로그램을 사용하여 ? – Paolo
http://en.wikipedia.org/wiki/Quantum_suicide_and_immortality을 참조하십시오. – AaronLS
@aaronls - 멋지게 연결되었지만 질문과 무슨 상관이 있습니까? –