以前一直不知道位運算中的&、|
、!~是什麼情況,今天看了一下位運算,感覺好簡單,前兩者跟運算子&&、
||差不多,只不過位運算中操作是按二進位制的方法操作的,比如10和
12他們的二進位制為:
1010
和1100
,進行&
運算,每一位比較出來的結果為:
1000
,結果是
8。進行
|運算,每一位比較的結果是:
1110
,結果是
14。不同是
~運算子,我的理解是,把按位運算的數變成
2進製,然後取反。取反後,根據情況將他們返回到二進位制數,然後再變成十進位制,這是計算機的操作方法。例如:
7(二進位制
0000 0000 0000 0111
)----
取反後(
1111 1111 1111 1000
)這是計算機的二進位制補碼形式儲存在計算機中的,我們要找到他的反碼,然後根據情況,得到二進位制數,再化成十進位制。則(
1111 1111 1111 1000
)一看是某個負數的補碼,所以先取反碼,再加一。取反後(
1000 0000 000 0111
,注意首位是符號位不能變),加一後(
1000 0000 000 1000
),結果為:
-8。再來看看
-7。首先寫出二進位制的-7(
1000 0000 0000 0111
)取反後(
1111 1111 1111 1000
),這時需要將這個反碼
+1,(
1111 1111 1111 1001
)變成補碼,然後再取反變成原碼(
0000 0000 0000 0110
),即是乙個二級制數,再把它變成十進位制為
6,暫且這樣理解。網上的資料比較多,介紹正負數的原始碼和補碼,反碼的問題很清楚。
讀C陷阱與缺陷筆記
1.字元與字串 1 用單引號引起的乙個字元實際上代表乙個整數,整數值對應於該字元在編譯器採用的字符集中的序列值。eg 對於採用ascii字符集的編譯器而言,a 的含義與0141 八進位制 或者97 十進位制 嚴格一致。2 用雙引號引起的字串,代表的是乙個指向無名陣列起始字元的指標,該陣列被雙引號之間...
C陷阱和缺陷 連線
一,概念 聯結器的作用在於把有編譯器或彙編器生成的若干個目標模組,整合成乙個被稱為載入模組或可執行檔案的實體,該實體能夠被作業系統直接執行。其中,某些模組式直接作為輸入提供給聯結器的 而另外一些目標木塊則是根據連線過程的需要,從包括有型別printf函式的庫檔案中取得的。二,連線過程問題的根源 c程...
C陷阱與缺陷三 1
理解陣列與指標的概念 includeint main 指標在32位機器上佔4位元組。雖然我們可以用 a 給陣列元素賦值,但是a不是指向首位址的指標,其實只是乙個引用。int cal 12 13 該陣列擁有12個陣列型別的元素,每個元素都是擁有13個整型數。includeint main sizeof...