数据存储的那些事2
Part1:原碼,反碼,補(bǔ)碼 有符號(hào)數(shù)? 符號(hào)位 數(shù)值位 整型
那么數(shù)據(jù)是按照什么規(guī)則存放在計(jì)算機(jī)中的呢?先了解一下,原碼,反碼,補(bǔ)碼。
按照定義是有符號(hào)的負(fù)數(shù)整型原碼反碼補(bǔ)碼才不相同,無符號(hào)的和正數(shù)三者相同。
第一位是符號(hào)位,都是用0表示正,1表示負(fù)。而數(shù)值位三者皆不相同
Part2:-10 整數(shù) 補(bǔ)碼 為什么 加法器 加減統(tǒng)一
我們舉一個(gè)例子int:-10,我們知道一個(gè)整數(shù)占據(jù)4個(gè)字節(jié)
00000000 00000000 00000000 00000000;空:一般情況不為0
10000000 00000000 00000000 00001010;原碼
11111111 11111111 11111111 11110101;反碼
11111111 11111111 11111111 11110110;補(bǔ)碼
ff ff ff f6;十六進(jìn)制表示
在計(jì)算機(jī)中,整型數(shù)據(jù)是用補(bǔ)碼的十六進(jìn)制來表示的
為什么要這樣做?
這就和計(jì)算機(jī)的結(jié)構(gòu)有關(guān)系了,按照我之前的想法,用信號(hào)來表示數(shù)字的形式,這些數(shù)字終究是要拿來使用的,數(shù)字之間的基本運(yùn)算法則,加減運(yùn)算又是怎樣實(shí)現(xiàn)的,用我們來想很簡(jiǎn)單1+1,等于2,在計(jì)算機(jī)中又是如何加減呢?
加法,在學(xué)習(xí)計(jì)算機(jī)組成原理之前,就先知道加法是將兩個(gè)位置上的信號(hào)相加,用一個(gè)元件,當(dāng)二則都為1是則變?yōu)?,同時(shí)后一位變?yōu)?(0)或則0(1)。減法呢1變成0,0變成1嗎?這和加法是一樣的啊?要如何分辨呢?在那個(gè)年代,原碼反碼補(bǔ)碼還沒有出現(xiàn)的時(shí)候,為了解決這個(gè)問題,有人提出了原碼反碼補(bǔ)碼的概念,一堆101010中探究著,現(xiàn)在看來似乎很和合理,知道有這個(gè)規(guī)則,有點(diǎn)像柏林墻了。補(bǔ)碼的存在使得減法可以做加法運(yùn)算。
Part3:
大小端 內(nèi)存塊 低地址 模式 方式 字節(jié)順序
我們?cè)陂_辟空間的時(shí)候,將開辟的那塊空間稱之為內(nèi)存塊,按照編號(hào),是有著高地址端和低地址端的,同樣數(shù)據(jù)0x11223344,0x高位…地位。
我們以字節(jié)為單位將它放入內(nèi)存塊中,很顯然有著多種排序方式,使用最多的兩種方式為高地址放低位,低地址放高位和高地址放高位,低地址放低位,兩種方式,前者被稱為大端模式,后者被稱為小端模式。因?yàn)槠涫前凑兆止?jié)來放入的,也就有了字節(jié)順序這個(gè)名詞。
Part4:
char ?%d 整型提升 %u
之前有說到char類型可以到整型里去,但char只占一個(gè)字節(jié),當(dāng)一個(gè)整型數(shù)據(jù)要放到char中時(shí),一樣要按32位先轉(zhuǎn)換為補(bǔ)碼,只不過最后放入的只有低位的一個(gè)字節(jié)。當(dāng)char要以%d輸出時(shí),要先進(jìn)行整型提升,如果首位是1,則進(jìn)行補(bǔ)1到32位,若是0則補(bǔ)0(只有負(fù)整型補(bǔ)的是1,因?yàn)樗a反碼補(bǔ)碼不相同)
%u是無符號(hào)整型,在補(bǔ)碼轉(zhuǎn)換前進(jìn)行判斷(整型提升之后)
Part5:
char 范圍 補(bǔ)碼 有無符號(hào) 補(bǔ)1000 0000 圓圈+1變號(hào) 128
char類型分為有符號(hào)和無符號(hào),在內(nèi)存中也是以補(bǔ)碼的形式存放、
有符號(hào)的范圍是·-128—>127:01111111(127)+1=10000000(-128)
無符號(hào)的范圍是0à255:00000000(0)à11111111(255)
我們知道在內(nèi)存中的補(bǔ)碼轉(zhuǎn)換回去需要減一,但有符號(hào)的·10000000在這里自動(dòng)會(huì)轉(zhuǎn)換會(huì)-128。且由于補(bǔ)碼的原因,在這里127+1=-128。
總結(jié)
- 上一篇: 关于数据存储的那些事1
- 下一篇: 关于数据存储的经典题