天天看點

C位級運算基礎

無符号數

有符号數,有符号數的最常見的表示方法之一就算補碼

補碼的 最高有效位是符号位 

正數的補碼是本身,負數的補碼是本身值每位求反最後加1

二進制的&與(都為真時為真) |或 (一個為真時為真)^異或(有一個為真,但兩個不相同時為真) ~取反(真時假,假時真)

-3 的16 進制  首先原碼為0011,假如是正數補碼等于原碼, 負數的求補碼,首先計算|-3|的原碼,然後再計算反碼(就是按二進制位取反),再在反碼的基礎上加1

正數補碼 是本身 ,負數補碼是絕對值按位取反碼再加1;豁然明朗,

再次總結下  無符号表示,有符号表示(一般最通常用的是補碼,或是反碼)

w位無符号 取值範圍0 ~ 2(w - 1)    1111  8 4 2 1 = 15    2(w) - 1

128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 192 + 56 + 7 = 192 + 63 = 255 = 2(8) - 1 = 16 * 16 = 256 - 1 = 255 

w位 無符号取值範圍 2(w) - 1 

w位 有符号取值範圍-2(w - 1) ~ 2(w -1) - 1

w = 8

-2(8-1) ~ 2(8-1) - 1 = -2(7) ~ 2(7) - 1  = -128 ~ (128 - 1) = 128 ~ 127

補碼,反碼 

有符号才反碼、補碼,反碼 + 1 = 補碼

有符号的 補碼是先通過絕對值的原碼 取反再 加 1

再加深下對二進制移位規則的回顧,左移x << k 丢棄最高的k個有效位,在右側尾部補充k個0

右移x >> k 邏輯移時 在左側補k個0

算符移位時在左側補k個移位數的最高有效位.

繼續閱讀