為什么(-1)轉化為unsigned char變為255


-1在內存中以補碼的形式存在,

源碼:1(符號位)0000 0001

補碼=源碼取反加1(記住:符號位不變) 即1111 1110+1

即為 1111 1111 unsigned char(1111 1111)當然就是255了

同理可推出unsigned char(-2) 為 254

 

順便說一下:

原碼就是二進制定點表示法,即最高位為符號位,“0”表示正,“1”表示負,其余位表示數值的大小。
反碼表示法規定:正數的反碼與其原碼相同;負數的反碼是對其原碼逐位取反,但符號位除外。
補碼表示法規定:正數的補碼與其原碼相同;負數的補碼是在其反碼的末位加1。

 

另一種算法:

無符號變量的值 =  類型可以取值的個數 + 【負數 * (-1) / 類型可以取值的個數】 * 類型可以取值的個數 + 負數

unsigned char(-2) 以上套用得:

無符號變量的值 = 256  + [(-2)*(-1)/256]*256 + (-2)

        = 256 + 0*256 + (-2)

        = 254


免責聲明!

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



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