學習C語言過程中打過這樣一串代碼: 出現如下情況: 當然,我知道數值過大會溢出,但為什麼溢出後會是這些值,最後一直0迴圈,我不知道,最後在“編程中國”發帖得到了答案,答案如下: int是有符號的,占兩個位元組16位,下麵以一個8位的二進位數來說(最高位為符號位) 正數:00000001 到 01111 ...
學習C語言過程中打過這樣一串代碼:
#include<stdio.h> int main() { int i,num; for(i=1;i<=40;i++){ num += num; printf("%d",num); } return 0; }
出現如下情況:
當然,我知道數值過大會溢出,但為什麼溢出後會是這些值,最後一直0迴圈,我不知道,最後在“編程中國”發帖得到了答案,答案如下:
int是有符號的,占兩個位元組16位,下麵以一個8位的二進位數來說(最高位為符號位)
正數:00000001 到 01111111
負數:00000000 到 11111111
-0:1000 0000;+0:0000 0000
C規定-0為-128,所以當最大的正數01111111溢出就會變成1000000也就是-128,這好比一個環,溢出時在環內迴圈