C語言中的char類型

        今天爲自己的bootloader調試串口輸入,被好好地折騰了一番,關鍵問題就是對這個char類型更深入的認識。

       在《C語言程序設計語言》裏的原文是這樣的:"將字符類型轉換爲整型時,我們需要注意一點。C語言沒有指定char類型的變量是有無符號變量(unsigned)還是帶符號變量(signed)。當把一個char類型的值轉換爲int類型的值時,其結果又沒有可能成爲負數?對於不同的機器,其結果也不同,這反映了不同結構之間的區別。在某些機器中,如果char類型值得最左邊一位是1,則轉換爲負整數(進行符號擴展)。而在另一些機器中,如果char類型值轉換爲int類型時,在char類型值的左邊添加0,這樣導致的轉換結果值總是正值“。在ARM中,屬於後面一種情況。在我的程序裏判斷到沒有字符從串口輸入的話就返回-1。結果我用-1 != (*p = getc())時,發現總是爲真,我跟蹤到getc的返回值爲0xffffffff,但是到了*p裏就是0xff。然後換個int型變量保存返回值就是0x000000ff,從這裏可以看到屬於上面說的第二種情況。解決辦法就是把判斷條件改成(char)-1,就OK了。

       現在自己的這個bootloader就剩下中斷沒有進行編寫和重定位了,完成這部分後,將把自己整個代碼打包貼上來。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章