數值表示與位運算一點筆記

2021-03-31 23:34:35 字數 1698 閱讀 1551

1,儲存器由若干「位元組」

byte

單元組成。而每個位元組都有乙個位址,當然這個位址是物理排序的,怎麼說呢?好比就是從

0開始刻出的標尺一樣的刻度位置,所以位址是物理固定的;我們說的改變位址,其實改變的不是位址,而是位址裡面的內容。位元組則是由若干個二進位制位

bit組成的。而若干個位元組組成乙個儲存單元(比如

4個位元組可以儲存

int整數的單元),叫做「字」(

word

)。在每乙個儲存乙個資料或者乙個指令(所謂的

32位,

64位指令系統)。另外,乙個位元組由

8個二進位制位組成,最右邊的一位是「最低位」,最左邊的一位是「最高位」,每個位上的值是0或者

1。比如

ox10000001

表現了這個高位序列。

2,表示數值的方法:原碼,反碼和補碼。

1)原碼。最高位是符號位(

0表示正,

1表示負),其他各位表示數值本身的絕對值。注意小譚說,+0和-

0表示的不是同乙個

0,在記憶體中有兩個表示,所以0

不適合計算機的運算。有個問題,在我們程式設計中經常用到比較(如:

value == 0

)這樣的表示式,經過實踐的檢驗是正確可行的,我測試了一下,正0和負

0都表示成了同乙個值。怎麼證明小譚的說法,請大家指點。

2)反碼。若乙個值是正,其反碼和原碼是一樣的;若為負,則符號位為

1,其餘各位是對原碼取反。

3)補碼。原碼和反碼不適合計算機內運算,因為要單獨處理其符號。補碼規則:對整數,原碼、反碼、補碼相同;對負數,最高位為

1,其餘各位取原碼的反,然後對整個數加1。

4)總結:這些數值表示,在我程式設計過程中從來沒有考慮和體驗過,一定是我太菜的緣故。

3,位運算。運算量只能是整數或者字元型,不能為實數等其他型別。

1)&

按位與:兩個相應位都位

1,則為

1,否則為

0。特殊用途

l清零。找乙個數滿足原來的數中為

1的位在新數中對應

0條件即可。

l取乙個數的指定位。比如高位或者低位,將所取的位對應

1,其他位對應0。

2)|

按位或:兩個相應位只要有乙個為

1,該位結果為

1。作用主要是對乙個資料某些位定位為1。

3)^

按位異或:參加運算的兩個相應位同號,則為

0;異號則為

1。注意

l特定位翻轉。構造的數在特定位上取

1,其餘位取0l

與0相^

,則是保留原值。

l交換兩個值,不用臨時變數。

a = a ^b; b=b^a;a=a^b

4)~

取反:對二進位制按位取反,注意其優先順序特別高

5)<<

左移:左移一位相當於該數乘以

2,兩位乘以

4,改規則只適合在左翼中溢位的被捨棄的高位不含

1的情況。

6)>>

右移:就好理解了,但是要注意符號位問題。

l無符號數,右移在左邊高位移入0。

l有符號數,整數的話移入

0,負數的話,移入0或

1取決於所用的計算機系統。即移入

0為「邏輯右移」,移入

1為「算術右移」。

php一點筆記

1.replace函式作用 替換字串中匹配到的預先定義的正規表示式的內容 3.建立與資料庫的連線 db mysql connect localhost root or die could not connect mysql error mysql select db register or die ...

Redis的一點筆記

優勢之三原子 什麼是原子性,什麼是原子性操作?舉個例子 a想要從自己的帳戶中轉1000塊錢到b的帳戶裡。那個從a開始轉帳,到轉帳結束的這乙個過程,稱之為乙個事務。在這個事務裡,要做如下操作 如果在a的帳戶已經減去了1000塊錢的時候,忽然發生了意外,比如停電什麼的,導致轉帳事務意外終止了,而此時b的...

jdbc一點小筆記

jdbc的常用介面的步驟,1使用driver或者class.forname 進行註冊驅動 2使用drivermanager進行獲取資料庫的鏈結 使用connection獲取語句物件 使用語句物件介面statement方法執行查詢或更新操作 查詢的resultset是結果集使用之前一定要先判斷是否存在...