2017-09-20 21 views
0

정수 오버플로 및 언더 플로에 대해 배우고 음수 입력을 통해 j 값을 제어 할 수 있는지 궁금합니다. I 255으로 "J"의 값을 원하는 경우정수 오버플로/언더 플로우

int i = n; 
size_t j = i; 
printf("%lu",j); 

예를 들어,이 음수 크래프트 "N"나를 그 출력을 제공 할 수있다?

+3

예! 'n'을 255로 설정할 수 있습니다. :-P –

+0

"정수 언더 플로"는 없습니다. 일반적으로 허용되는 명명법에서 "언더 플로"는 부동 소수점 산술에서만 발생할 수 있습니다. 귀하의 질문에 대답은 간단합니다 : 단지 'n'을 '255'로 설정하십시오. 대답의 단순함과 단순함은 당신이 당신의 질문에서 뭔가를 놓쳤다 고 의심하게 만듭니다. – AnT

+1

죄송합니다. 음수 값을 주셨습니다. 질문을 업데이트했습니다. –

답변

1

나는 당신이 찾고있는 것은 8 비트에서

signed char i = -1; 
unsigned char j = i; 
printf("%u\n", j); 

는, 서명 숫자가 -1 255

당신은에 대한 size_t을 물어 부호없는 값으로 "순환"생각 예, 때문에 그것은 부호없는 유형이지만 일반적으로 32 비트 또는 64 비트입니다. 이러한 크기에서 숫자 255는 부호가있는 변형과 부호가없는 변형에서 모두 표현 가능하므로 255에 해당하는 음수는 없습니다. 그러나 서로 다른 값을 사용하여 비슷한 효과를 볼 수 있습니다. 예를 들어, 32 비트의 int,이 코드를 사용하여 컴퓨터에 :

unsigned int i = 4294967041; 
int j = i; 
printf("%d\n", j); 

는 -255를 인쇄 할 가능성이있다. 이 값은 2^32 - 255 = 4294967041이기 때문에 발생합니다.

+0

후자의 코드에서 동작은 구현에 따라 정의되며 (신호를 발생시킬 수 있음) –