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