關於unsiged char 的乙個面試題

2021-05-23 16:31:52 字數 789 閱讀 8797

剛才在孫曉亮的部落格上看到一道c語言面試題,說是乙個小問題,但我在看完標題之後都感覺出來他要考察變數型別表示越界問題了,因為以前在電腦鼠的演算法程式中有過類似的問題,當時姚司還問過,但當時沒想出來,後來才恍然大悟的。下面把這道題貼出來大家一塊看看吧。首先宣告一下:寫這個不是為了裝b,本人c語言功底不好,寫出來只為大家共同分享,已經看過的人就不需要再看了。

#include

#define max 255 

int main()

大家看看有什麼錯誤?這個問題錯誤比較隱蔽,不仔細一點是看不出來的。

可能有的人已經看出來了,我來給大家解釋一下吧,錯誤在於unsigned char 這個資料型別,它佔了乙個位元組(8位),表示的資料範圍是0~255(00000000~11111111,八位);當i=255; i++ ;因為 i本身是unsigned char型別,佔8位,所以此時i+1變成了100000000 9位,又因為i只能佔8位,所以捨掉了最高位,此時的i值又變成00000000了,即就是0;也就是這時i的值變為0了,然後就從i=0開始重新開始迴圈,最後一直迴圈下去成了死迴圈了。

不信大家可以去做一下這個實驗,執行一下下面這個程式:  

#include

int main()

{unsigned char i=0;

printf("/n%d /n",--i); 

i=255;

printf("/n%d /n",++i);

這個例子就充分說明了越界問題。通俗地講越界會使變數的值會「從乙個極端走向另外乙個極端」。

總是一句話:基礎很重要,我們得打好基礎。

關於Integer int String的一些方法

關於integer int string的一些方法 1.integer的parseint 和 valueof。integer靜態記憶體儲存 128 127 1 返回型別 parseint 返回的是int。valueof 返回的是integer 2 判斷相等 int 用 integer 用 equal...

關於Android Broadcast 的一樁血案

之前一直使用broadcast都僅僅侷限於簡單呼叫,疑惑是根據需求選擇傳送方式,亦或是看心情決定是什麼方式註冊,直到今天,發生了乙個關於廣播的血案,事情的經過是這樣 嫌疑人 傳送了乙個無序廣播,通知各位聽眾某某事情,聽眾 舉報別人聽到了,它沒聽見,大喊冤枉,我都廣播了,並且是不分高低貴賤的無序廣播,...

mysql關於日期 關於mysql日期的一些例子

mysql中的月份計算 減少乙個月,比如 原來的subtime 2006 10 22 12 22 22 減少後變成 2006 9 22 12 22 22 update message set subtime date sub subtime,interval 1 month 增加乙個月 update...