天天看點

計算機中的二進制

版權聲明:本文為sydMobile原創文章,轉載請務必注明出處! https://blog.csdn.net/sydMobile/article/details/76039477

在複習Java基本類型的時候突然遇到的問題

為什麼byte型的資料表示的範圍是 -128~127呢?我們都知道byte在Java中占一個位元組,一個位元組也就是八位,簡單來說就是八個二進制(電腦隻認識0,1 最終都是轉化成二進制來識别的)在Java中最高位是用來表示正負數的,0代表正數,1代表負數。byte型的占八位數,有一位是符号位也就是說用來表示實際數大小的也就是7位,那麼為什麼不是

11111111 ~ 01111111 也就是(-127 ~ 127)呢?

其實在Java中負數不是這麼表示的,并不是-127就是127化成二進制然後在前面加一個1表示負數。Java中表示負數是這樣的,比如-127,他的負數的二進制的表示方法是 -127的絕對值 127,取127的二進制 01111111,然後取反得到 10000000,然後再加一得到 10000001,這才是-127的二進制表示方法。那麼-128怎麼來的呢,其實-128就是 10000000,這就是8位數的最小負數的,可以看出在二進制負數中第一位始終是1,然後面的數越大表示這個數越大,後面的數越小表示這個數越小

比如 11111111 表示的是-1,這就是負數中最大的數了,10000000表示-128,這個數最小,-127就是10000001 ,拿出第一位符号位,後面的數比較大小就可以比較出這兩個數的大小

那麼-129呢,按照負數二進制的方法,應該是129的二進制,10000001,然後取反01111110,然後加一,01111111,可以看到得到的結果最高位是0,0應該表示正數,當遇到這種情況就說明位數不夠用了,它是負數應該主動在前面加1,也就是101111111,這個時候就是9位數了,就超出byte的範圍了。128也一樣,128二進可以制是 10000000, 看到最高一位是1,應該表示負數,可是128是正數,這個時候就要在前面加0,010000000表示128。