計算機中為什么最大的數值為127?
計算機中為什么最大的數值為127?
計算機中為什么最大的數值為127?學習啦小編認為可以從計算機中數值的表示中可以得出結論。
計算機很笨,只認識0和1,也就是所謂的二進制。現實中的東西要放進電腦,一定要轉化為0和1組成的數字串,不同的0和1的組合代表了不同的東西,這其實就是編碼。這是最基本的。還有很多編碼不是將某種東西直接變成0和1,而是編碼成別的數字串,這些數字串也能代表不同的東西,然后再將這些數字串變成0和1的數字串,再放進計算機中。
數值在二進制中的3種表示分別為:原碼、反碼和補碼。
原碼:將一個整數,轉換成二進制,就是其原碼。如單字節(jié)的5的原碼為:0000 0101;-5的原碼為1000 0101。
反碼:正數的反碼就是其原碼;負數的反碼是將原碼中,除符號位以外,每一位取反。如單字節(jié)的5的反碼為:0000 0101;-5的反碼為1111 1010。
補碼:正數的補碼就是其原碼;負數的反碼+1就是補碼。如單字節(jié)的5的補碼為:0000 0101;-5的原碼為1000 0101。
為什么在計算機中,負數用補碼表示呢?為什么不直接用原碼表示?如單字節(jié)-5:1000 0101。求補碼原則:(1)正數補碼還是他本身 (2)負數補碼,符號位變成1,其他位取負數的絕對值后按位取反再加1 (3)補碼中高位進位都直接丟掉。
C語言中整型常量有三種不同的表示形式:
1、八進制整型常量:在八進制數值前面加前綴“0”,其數碼取值為0~7。例如:054、0567、05421。
2、十六進制整型常量:前綴為“0X”或“0x“,其數碼取值為0~9、A~F 或 a~f。例如:0X3D、0XE0、0xfff等。
3、十進制整型常量:既無前綴也無后綴。例如:254、745、890等。 如將存儲為long類型,需要在數字序列最后附一個字母L 或 l 作為后綴。例如:245L、7850L、124l等。
一般來說,整數常量是被當作 int 類型(32位)來存儲的。如果我們使用的整數常量超出了 int 的表示范圍,C 語言規(guī)定編譯器自動使用 unsigned int 來處理這個常量。如果 unsigned 也不足以表示這個常量的話,編譯器就會用 long long。如果還表示不了的話,那就用 unsigned long long。如果 unsigned long long 也表示不了,那么編譯器就沒轍了。例如:如果 int 是 16 位的話,它就表示不了常量 1000000。編譯器會使用 long long來處理這個常量,因為 unsigned int 也表示不了 1000000 。
同樣,十六進制和八進制整數常量通常也是被作為 int 來處理。但是,當我們使用的常量超出了 int 的表示范圍后,編譯器會依次使用unsigned int,long long 和 unsigned long long。直到所使用的類型足以表示那個常量為止。
補碼小技巧
注意一個數的補碼和其相反數的補碼之間的關系是,這個數的補碼各位取反后加1得到其相反數的補碼。例如-128的相反數和0的相反數在計算機里面還是本身,-128補碼是1000 0000,各位取反加一后還是1000 0000故相反數不變;0的補碼 0000 0000,各位取反加一后仍為0000 0000(高位自動溢出)。其他的數的相反數概念在數學和計算機中是一樣的。比如-1的補碼1111 1111,其相反數的補碼是0000 0001。