1.基本概念
- 真值:+0101,-0100
- 機器數: [x]原=0101
機器數就是用 0表示正數,1表示負數。
2.幾種機器數
- 原碼:原碼就是符號位加上真值的絕對值, 即用第一位表示符號, 其余位表示值. 比如如果是8位二進制:
[+1]原 = 0000 0001 [-1]原 = 1000 0001
第一位是符號位. 因為第一位是符號位, 所以8位二進制數的取值范圍就是:
[1111 1111 , 0111 1111]==>[-127 , 127]
- 反碼:
反碼的表示方法是:
- 正數的反碼是其本身
- 負數的反碼是在其原碼的基礎上, 符號位不變,其余各個位取反
[+1] = [00000001]原 = [00000001]反 [-1] = [10000001]原 = [11111110]反
- 補碼:
補碼的表示方法是:
- 正數的補碼就是其本身
- 負數的補碼是在其原碼的基礎上, 符號位不變, 其余各位取反, 最后+1. (即在反碼的基礎上+1)
[+1] = [00000001]原 = [00000001]反 = [00000001]補 [-1] = [10000001]原 = [11111110]反 = [11111111]補
引用:https://www.cnblogs.com/wqbin/p/11142873.html
移碼:
移碼最簡單了,不管正負數,只要將其補碼的符號位取反即可。
例如:X=-101011 , [X]原= 10101011 ,[X]反=11010100,[X]補=11010101,[X]移=01010101
3.定點數和浮點數
定點數:小數點固定 x.xxxxxx,表示范圍受限,忘掉它吧
浮點數:數的范圍和精度分別表示。
一般格式 :EEEE......EMMM.......M,E部分是階碼(數的范圍i),M部分是尾數(數的精度)。
缺點:階碼和尾數位數不固定,太靈活了
E:階碼位數,決定數據的范圍
M:尾數位數決定數的精度
IEEE754格式:跟我背下來----
32位的是(單精度):1位符號位S + 8位偏指數E + 23位有效尾數M,偏移值為127。
64位的是(雙精度):1位符號位S + 11位偏指數E + 52位有效尾數M,偏移值為1023。
真值就是(32位為例) N = (-1)^S * 2^(E-127) * 1.M
例題:
上面是32位精度
S:1表示負數 ,0表示正數
浮點數的特殊情況:
E=0,M=0:機器零
E=255,M=0:無窮大,對應於x/0
E=255,M!=0:非數值NaN,對應0/0
ps:附上一份IEEE754文檔:link