這個涉及補碼的知識。我先給你寫出結論:正數的補碼是本身的二進位制表示,負數的補碼=對應正數的二進位制反碼+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的原因。後面一個方法是一樣的,不再贅述。
當然補碼的知識不止於此,有興趣可以在網上尋找有關資料。
這個涉及補碼的知識。我先給你寫出結論:正數的補碼是本身的二進位制表示,負數的補碼=對應正數的二進位制反碼+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的原因。後面一個方法是一樣的,不再贅述。
當然補碼的知識不止於此,有興趣可以在網上尋找有關資料。