讀《C陷阱和缺陷》(三)

2021-06-28 01:17:06 字數 964 閱讀 7831

以前一直不知道位運算中的&、|

、!~是什麼情況,今天看了一下位運算,感覺好簡單,前兩者跟運算子&&、

||差不多,只不過位運算中操作是按二進位制的方法操作的,比如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...