天天看點

signed 的範圍大小為什麼不一樣?

1.signed的正數範圍比負數範圍小1?比如有符号的char的範圍是-128-127,為什麼?

因為計算機使用補碼來表示負數!盡管c語言标準并不要求用補碼來表示,而java終明确規定補碼表示 而補碼規定10000000是用來表示-128,不是用來表示-0

2.如何從補碼計算出他代表的十進制數值?

舉例說明: 01010100(補碼) = 2的六次方+2的四次方+2的2次方=84 1 1010100(補碼)  =(負1*2的七次方)+2的六次方+2的四次方+2的2次方=負64

即:最高位如果是1,那麼是(-1)*2的N次方,最高位是符号位,同樣用來計算!

3.範圍如何計算出來的?

在unsigned無符号表示的時候,沒有負數,所有的位都來表示大小,故數值大小從00000000-11111111 (都以八位為例子)即:0-255 對于有符号位:最高位如果是1,表示負數;0表示正數 是以11111111-10000000即:-1到-128 00000000-01111111 即:0-127