符號擴展


符號擴展:當用更多的內存存儲某一個有符號數時,由於符號位位於該數的第一位,擴展之后,符號位仍然需要位於第一位,所以,當擴展一個負數的時候需要將擴展的高位全賦為1.對於正數而言,符號擴展和零擴展是一樣的,因為符號位就是0. 
比如一個用一個8位二進制表示-1,則是10000001 
如果把這個書用16位二進制表示時,則為11111111 10000001 高位全都是1,這個叫做符號擴展,主要用於對其操作數。 

零擴展就是全補零。不論其符號位是多少,高8位全都補0.


能過上面的定義可以看出在C++中,如果把一個char向一個整形轉換的時候,就會存在着這個問題

 

如果你想得到一個正數,那么如果一個字符的ASCII碼值是小於零的,而直接用(int)c進行強制類型轉換,結果是通過符號擴展得到的也為一個負數。要得到正數,一定要用(int)(unsigned char)c;因為unsigned char去除了c的符號位,所以,這樣的類型轉換后,再用(int)進行轉換得到的就是一個正數。

 

轉載自:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM