在轉兩張講相關話題的兩張貼
在修改游戲過程中,大家可能會產生一點疑問,一字節數據可表示的范圍是0--255,那么負數又怎么表示呢?原來在計算機中是這樣規定的,用一個數的最高一位表示正負,0為正,1為負.如0111,1111轉換為十進制為127,1111,1111為-127,由此我們知一字節的范圍為-127--127,其他字節的范圍類推. 
上面講的都是原碼表示法,可在計算機中的數據都是以補碼存放的,只有這樣才能減輕cpu的負擔.提到補碼,就不得不提反碼了.計算機中是這樣規定反碼的,如果是正數,則按原碼形式不變,如127仍為0111,1111;而如果為負數則,第一位為1,其他各位取反(即0變為1,1變為0),如原碼-127(1111,1111),表示為1000,0000.
補碼同上,如果是正數,則按原碼形式不變,如127仍為0111,1111;如果為負數則除第一位為1外,其他各位取反加1,如-127,先取反為1000,0000,然后加1,為1000,0001.但1000,0000比較特殊,用它來表示-128,由此我們知補碼可表示的范圍是-128--127。
上面這種方法是我們通用的。
下面這種方法,我們通常不用,講這種方法的書也不多,電子科大出版的《脈沖與數字電路-何緒凡 》里有講。
原碼、反碼、補碼的定義
1、原碼的定義
①小數原碼的定義 
 [X]原 =[X                    0≤X <1 
             [1- X    -1 < X ≤ 0 
 例如: X=+0.1011 , [X]原= 01011
        X=-0.1011  [X]原= 11011
②整數原碼的定義 
 [X]原 =[X                     0≤X <2n 
              [ 2n-X        - 2n < X ≤ 0 
2、補碼的定義
①小數補碼的定義
 [X]補 =[X                    0≤X <1 
              [2+ X       -1 ≤ X < 0 
例如:  X=+0.1011,   [X]補= 01011
        X=-0.1011,  [X]補= 10101 
②整數補碼的定義  
 [X]補 =[X                                0≤X <2n 
               [2n+1+X          - 2n ≤ X < 0 
3、反碼的定義
①小數反碼的定義 
 [X]反 =[ X                                   0≤X <1 
               [2-2n-1-X            -1 <X ≤ 0 
例如:   X=+0.1011      [X]反= 01011
         X=-0.1011     [X]反= 10100 
②整數反碼的定義 
 [X]反 =[ X                                          0≤X <2n 
              [2n+1-1-X            - 2n < X ≤ 0 
4.移碼:移碼只用于表示浮點數的階碼,所以只用于整數。 
①移碼的定義:設由1位符號位和n位數值位組成的階碼,則 [X]移=2n + X     -2n≤X ≤ 2n
例如: X=+1011     [X]移=11011     符號位“1”表示正號
              X=-1011     [X]移=00101     符號位“0”表示負號 
②移碼與補碼的關系: [X]移與[X]補的關系是符號位互為反碼,
例如: X=+1011     [X]移=11011     [X]補=01011 
              X=-1011     [X]移=00101     [X]補=10101  
③移碼運算應注意的問題:
◎對移碼運算的結果需要加以修正,修正量為2n ,即對結果的符號位取反后才是移碼形式的正確結果。
◎移碼表示中,0有唯一的編碼——1000…00,當出現000…00時(表示-2n),屬于浮點數下溢。