小豆丁:老張啊,你幹啥呢?
小豆丁:老張啊,你這會忙不?
小豆丁:老張啊,你別不理我啊?
老張:沒看我正忙呢嗎!
小豆丁:別跟我說你在忙著睡覺!!!哼!!!
老張:你找我肯定不是啥好事,說吧,啥情況?
小豆丁:嘿嘿,老張果然慧眼如炬料事如神,幫我看個代碼唄~
老張:啥代碼,我瞧瞧!
小豆丁:就這個!結果為啥不是300啊!
老張:肯定不是300啊,應該是44吧!
小豆丁:對啊對啊,為啥你一看就知道結果是44呢,你真厲害!
老張:少拍馬屁!這跟二進位有關係!如果不了解二進位和數據類型的相關知識,是很難理解程序輸出結果的。
小豆丁:快給我解釋解釋吧!
老張:你在程序中把數字300賦值給字符類型變量ch,在沒有特殊處理的情況下,我們C語言程序中出現的數字都是按照四字節的整數類型處理的。300的二進位表示為:
00000000 00000000 00000001 00101100
而字符類型變量ch在內存中只佔一個字節,它無法全部存下數字300的數據。
小豆丁:哦,那怎麼辦啊?
老張:畢竟ch變量只有一個字節,所以在存儲的時候,300的前三個字節內容被捨棄,只有最後一個字節的內容被保存到ch變量中,也就是說ch變量的這一個字節存儲的內容是
00101100;
小豆丁:可是,第三個字節上還有數據呢!這就不要了?
老張:不要了!存不下,該捨棄就捨棄就捨棄唄!
小豆丁:怪不得最終結果變成了44,原來是這麼回事啊!
老張:通過這個練習,說明了一個問題!
小豆丁:啥?
老張:關於二進位的問題,你掌握得不牢固!快去把二進位的內容再給我複習一遍!!!
小豆丁:哦……