[英]What is the output of this program and how?
#include <stdio.h>
int main()
{ char i=0;
for(;i>=0;i++);
printf("%d",i);
return 0;
}
該程序的輸出為-128。 據我所知,字符變量將溢出並且所有位將為0。並且采用二進制補碼將再次為0。有人可以解釋這個過程嗎?
編輯 :只是要澄清這不是我的程序。 這是競爭性考試中的編程問題。
您關於溢出的假設是不正確的。 溢出無符號類型會將所有位設置為零,但是溢出有符號類型是未定義的 ,因此可能導致任何值。
因此,您得到的結果取決於您的(編譯器)實現。 可以解釋一下
char
。 char
有8位。 鑒於所有這些假設(記住,這些都不是被C指定),遞增127
以最大可能char
值(表示為0111 1111
)產生-128
,最小可能的值(表示為1000 0000
)。
TL; DR-您的代碼未定義,請勿編寫此類代碼。
實際上,在每次迭代中,循環都會使i
遞增1
,這使我們i = 127
。
0111-1111
。 1
。 0111-1111
+ 0000-0001
= 1000-0000
1000-0000
= -127
希望你能得到。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.