1,, 存儲(chǔ)器由若干“字節(jié)”byte單元組成。而每個(gè)字節(jié)都有一個(gè)地址,,當(dāng)然這個(gè)地址是物理排序的,,怎么說呢?好比就是從0開始刻出的標(biāo)尺一樣的刻度位置,,所以地址是物理固定的,;我們說的改變地址,其實(shí)改變的不是地址,,而是地址里面的內(nèi)容,。字節(jié)則是由若干個(gè)二進(jìn)制位bit組成的。而若干個(gè)字節(jié)組成一個(gè)存儲(chǔ)單元(比如4個(gè)字節(jié)可以存儲(chǔ)Int整數(shù)的單元),,叫做“字”(word),。在每一個(gè)存儲(chǔ)一個(gè)數(shù)據(jù)或者一個(gè)指令(所謂的32位,,64位指令系統(tǒng)),。另外,一個(gè)字節(jié)由8個(gè)二進(jìn)制位組成,最右邊的一位是“最低位”,,最左邊的一位是“最高位”,,每個(gè)位上的值是0或者1。比如ox10000001表現(xiàn)了這個(gè)高位序列,。 2,, 表示數(shù)值的方法:原碼,反碼和補(bǔ)碼,。 1) 原碼,。最高位是符號(hào)位(0表示正,1表示負(fù)),,其他各位表示數(shù)值本身的絕對(duì)值,。注意小譚說,+0和-0表示的不是同一個(gè)0,,在內(nèi)存中有兩個(gè)表示,,所以0不適合計(jì)算機(jī)的運(yùn)算。有個(gè)問題,,在我們編程中經(jīng)常用到比較(如:value == 0 )這樣的表達(dá)式,,經(jīng)過實(shí)踐的檢驗(yàn)是正確可行的,我測(cè)試了一下,,正0和負(fù)0都表示成了同一個(gè)值,。怎么證明小譚的說法,請(qǐng)大家指點(diǎn),。 2) 反碼,。若一個(gè)值是正,其反碼和原碼是一樣的,;若為負(fù),,則符號(hào)位為1,其余各位是對(duì)原碼取反,。 3) 補(bǔ)碼,。原碼和反碼不適合計(jì)算機(jī)內(nèi)運(yùn)算,因?yàn)橐獑为?dú)處理其符號(hào),。補(bǔ)碼規(guī)則:對(duì)整數(shù),,原碼、反碼,、補(bǔ)碼相同,;對(duì)負(fù)數(shù),最高位為1,,其余各位取原碼的反,,然后對(duì)整個(gè)數(shù)加1,。 4) 總結(jié):這些數(shù)值表示,在我編程過程中從來沒有考慮和體驗(yàn)過,,一定是我太菜的緣故,。 3, 位運(yùn)算,。運(yùn)算量只能是整數(shù)或者字符型,,不能為實(shí)數(shù)等其他類型。 1) & 按位與:兩個(gè)相應(yīng)位都位1,,則為1,,否則為0。特殊用途 l 清零,。找一個(gè)數(shù)滿足原來的數(shù)中為1的位在新數(shù)中對(duì)應(yīng)0條件即可,。 l 取一個(gè)數(shù)的指定位。比如高位或者低位,,將所取的位對(duì)應(yīng)1,,其他位對(duì)應(yīng)0。 2) |按位或:兩個(gè)相應(yīng)位只要有一個(gè)為1,,該位結(jié)果為1,。作用主要是對(duì)一個(gè)數(shù)據(jù)某些位定位為1。 3) ^ 按位異或:參加運(yùn)算的兩個(gè)相應(yīng)位同號(hào),,則為0,;異號(hào)則為1。注意 l 特定位翻轉(zhuǎn),。構(gòu)造的數(shù)在特定位上取1,,其余位取0 l 與0相^,則是保留原值,。 l 交換兩個(gè)值,,不用臨時(shí)變量。a = a ^b; b=b^a;a=a^b 4) ~ 取反:對(duì)二進(jìn)制按位取反,,注意其優(yōu)先級(jí)特別高 5) << 左移:左移一位相當(dāng)于該數(shù)乘以2,,兩位乘以4,改規(guī)則只適合在左翼中溢出的被舍棄的高位不含1的情況,。 6) >> 右移:就好理解了,,但是要注意符號(hào)位問題。 l 無符號(hào)數(shù),,右移在左邊高位移入0,。 l 有符號(hào)數(shù),整數(shù)的話移入0,,負(fù)數(shù)的話,,移入0或1取決于所用的計(jì)算機(jī)系統(tǒng),。即移入0為“邏輯右移”,移入1為“算術(shù)右移”,。 |
|