在2147483647的邊緣瘋狂試探

來源:互聯網
上載者:User

標籤:個數   實驗   com   code   .com   c 語言   輸出   int   amp   

2147483648的緣起

最近其實一直都在是摸魚的狀態,編程也很少了。其實自己真的想有一段時間啥都別顧及的只是敲代碼就行了的時光。說我怠惰也好,現在感覺就是我幹什麼都有一種沒有用的感覺。

這次碰到的這個問題源於我們C 語言課上的實驗

#include <stdio.h>int main(){    int max(int x,int y);    int a,b,c;    while (1){    printf("input a&b: ");    scanf ("%d,%d",&a,&b);    c=max(a,b);    printf("max=%d\n",c);}    return 0;}int max(int x,int y){    int z;    if (x>y) z=x;    else z=y;    return z;}

本來也沒什麼,只是突然間有位老哥好像發現了新大陸

”哦豁,爆掉了“= =,輸入超大的數最後反而會輸出一個根本不在兩者之間的負數。

立刻丟掉了無聊的實驗內容,開始研究這個問題的本質。其實就是資料溢出吧。

實驗內容

其實之前還是瞭解了一下,int的範圍在vc6裡是-231~231-1,也就是-2147483648~2147483647。於是便開始瘋狂試探。


的確是2147483647的力量。

但現在有一個新的疑問便是 -1141710350 又是從何而來的呢?

監視變數

說來慚愧...我之前編程為了查看一個變數裡的內容,不停的用print,messagebox。。
知道現在知道可以用監視

可以發現一賦值123412341234就立馬變成了-1141710350

這時還是請出程式猿計算機吧。。

從上面的測試可以看出,這個數是與123412341234有關的

而它的二進位編碼是?0001 1100 1011 1011 1111 0010 1110 0001 1111 0010?

而如果只保留32位的話便成了1011 1011 1111 0010 1110 0001 1111 0010 這裡恰恰就是 -1141710350 的二進位代碼。


ps:位鍵盤真好玩= =

在2147483647的邊緣瘋狂試探

相關關鍵詞:
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.