【基本技巧】位運算-補碼

補碼:

32位無符號整數unisgned int:

直接把這32位編碼C看作32位二進制數N。

32位有符號整數int:

以最高位為符號位,0表示非負數,1表示負數。
對於最高位為0的每種編碼C,直接看作32位二進制數S;
同時,定義該編碼按位取反后得到的編碼~C表示的數值為-1-S。

32位補碼表示 unsigned int int
000000…000000 2147483647 2147483647
100000…000000 2147483648 -2147483647
111111…111111 4294967295 -1

因為用二進制表示一個int需要寫出32位,比較繁瑣,而用十進制表示,又不容易明顯的體現出補碼的每一位,所以在程序設計中,常用十六進制來表示一個常數。

比如:0x3f3f3f3f,它是滿足以下性質的最大正整數:
1.兩倍的這個數不爆int範圍;
2.每8位(每個位元組)都是相同的。

而memset只能賦出每個位元組都相同的數,0x3f3f3f3f便是其一。