回覆列表
  • 1 # 藍風24

    這個涉及補碼的知識。我先給你寫出結論:正數的補碼是本身的二進位制表示,負數的補碼=對應正數的二進位制反碼+1(反碼即二進位制的所以位取反),並規定首位為符號位不表示值,0為正1為負。

    說了這麼一堆,有啥用呢?有!整數在計算機中就是以補碼的形式儲存的。

    OK基礎有了我們來看看這個問題。int 型別的128,沒有問題,int儲存邊界遠比比128大。而轉化成byte型別,問題就來了。我們先來看int型別的128的二進位制表示:0000-0000-0000-0000-0000-0000-1000-0000也就是它的補碼

    轉化成byte型別表示為:

    1000-0000

    我們會發現這裡首位需要表示為值!但是遺憾計算機不會自動識別造型時的期望值。1000-0000在計算機中是一個補碼而並非一串正數二進位制。我們對它取反得到0111-1111發現正是最大的byte型別值127,再加一得128,而首位為1,表示為負,即1000-0000表示的就是-128就是最小的byte值。

    這也就是byte型別值介於-128~127的原因。後面一個方法是一樣的,不再贅述。

    當然補碼的知識不止於此,有興趣可以在網上尋找有關資料。

  • 中秋節和大豐收的關聯?
  • 怎麼看柳永寫的《雨林霖》?