1. 程式人生 > >萌C筆記——運算子之”位運算子“

萌C筆記——運算子之”位運算子“

                                  萌C筆記

Loading… 學友達がいい! 今天,萌C和你們聊聊C語言中的“運算子”。幾乎每一個程式都需要進行運算,對資料進行加工處理。而運算子是說明特定操作的符號,是進行運算和構造C語言表示式的工具。它就像吃飯、睡覺、玩手機一樣,作為C語言程式設計中必不可少的部分。Now,Let’s go into it. 首先,我們要大概瞭解有哪些運算子。例如:算術運算子、關係運算符、邏輯運算子、位運算子、賦值運算子、條件運算子、逗號運算子、指標運算子、求位元組數運算子、強制型別轉換運算子、成員運算子、下標運算子…等等。然後,今天的重點是”位運算子“,讓我們來學會理解和使用它吧! 在這裡插入圖片描述

進入位運算子之前,先提一下前三個運算子(算術運算子、關係運算符、邏輯運算子),它們是最常見的,也是同學們最習慣使用的,在這裡不做過多解釋,只提一下使用它們時常犯的錯誤: 在這裡插入圖片描述 例如,“等號”之間不能空格。其他的由兩個符號組成的運算子也是一樣,不能拆開去使用。就如同做一件事必須兩人齊心協力才能完成,如果兩人各做各的,最後也就無法實現目標。只有兩個符號聯絡在一起,才能有特殊的定義。 接著讓我們開始“位運算子”的學習。位運算,即程式中的所有數在計算機記憶體中都是以二進位制的形式儲存的,其就是直接對整數在記憶體中的”二進位制位“進行操作。簡單來說,位運算就是對二進位制數進行運算。 位運算子號如下: 在這裡插入圖片描述

按位與(and運算子:&)通常用於二進位制的取位操作。例如,兩個二進位制數進行比較,相同位的兩個數字都為1,則輸出為1;若有一個不為1,則輸出為0;若一個有數字,另一個為空位,則輸出為0。如圖:

在這裡插入圖片描述

按位或(or運算子:|)通常用於二進位制特定位上的無條件賦值。例如,兩個二進位制數進行比較,相同位的兩個數字只要一個為1,則輸出為1。如圖:

在這裡插入圖片描述

按位異或(xor運算子:^)通過對等長二進位制模式按位或二進位制數的每一位執行邏輯按位異或操作。例如:兩個二進位制數進行比較,如果某位不同,則輸出為1,;否則輸出為0。如圖:

在這裡插入圖片描述

按位取反(not運算子:~)的定義是把記憶體中的0和1全部取反。需要注意整數型別有沒有符號,因為如果物件是無符號整數(不能表示負數),在取反時會資料溢位,所以得到的值就是它與該型別上界的差值。如圖:

在這裡插入圖片描述

左移(shl運算子:<<)表示把一個十進位制數轉為二進位制數後,整體向左移任意位(在後面新增任意個0)。即,a<<b(a,b都為十進位制數)就表示把 a 轉為二進位制數後,向左移 b 位。例如:100的二進位制數為1100100,而110010000轉成十進位制數是400,那麼100<<2 = 400。可以看出,a<<b 的值實際上就是 a 乘以2的 b 次方,因為在二進位制數後新增一個0就相當於該數乘以2。現在這個運算子用的還少,以後會更多接觸到它。

帶符號右移(shr運算子:>>)和“左移”相似,a>>b 表示二進位制右移 b 位(去掉末 b 位),相當於 a 除以2的 b 次方(取整)。在以後的學習中,可以利用它提高一些執行的效率,目前也不深入研究它。

最後再說一下它們的優先等級,如果他們同時出現了,該按照哪個先執行呢?如果一起執行,而沒有先後順序,就會造成邏輯混亂。就如同十字路口的交通訊號燈,若是訊號燈壞了,車流的盲目行駛會造成及交通擁擠,甚至出現交通事故。因此,規定了優先等級,如圖:

在這裡插入圖片描述

對於“位運算子”,就簡單講到這裡啦,想要更深入學習它,請結合書本自己努力學習吧! 在這裡插入圖片描述 下一期再和大家見面咯,88

(如有不足請補足,如有錯誤請指正)