C/C++編程知識:運算符(二)丨按位運算符,知識點詳解

在C中,如下6個運算符是按位運算符(在位級別工做)web

 

C或C ++中的&(按位與)將兩個數字做爲操做數,並對兩個數字的每一位進行「與」運算。僅當兩個位均爲1時,AND的結果才爲1。面試

在C或C ++中(按位或)將兩個數字做爲操做數,並對兩個數字的每一位進行「或」運算。若是兩個位中的任何一位爲1,則OR的結果爲1。編程

C或C ++中的^(按位異或)將兩個數字用做操做數,並對兩個數字的每一位進行異或。若是兩個位不一樣,則異或的結果爲1。微信

在C或C ++中,<<(左移)採用兩個數字,左移第一個操做數的位,第二個操做數肯定要移位的位數。app

C或C ++中的>>(右移)採用兩個數字,右移第一個操做數的位,第二個操做數肯定要移位的位數。學習

C或C ++中的〜(按位非)取一個數字並將其全部位求反spa

代碼舉例:orm

 

輸出:視頻

a = 5,b = 9blog

a&b = 1

a | b = 13

a ^ b = 12

〜a = 250

b << 1 = 18

b >> 1 = 4

關於按位運算符的有趣事實

(1)左移位運算符和右移位運算符不該用於負數。若是任何一個操做數爲負數,則會致使未定義的行爲。例如,-1 << 1和1 << -1的結果均未定義。另外,若是數字移位的幅度大於整數的大小,則行爲是不肯定的。例如,若是整數使用32位存儲,則1 << 33是未定義的。

(2)從技術面試的角度來看,按位異或運算符是最有用的運算符。 它用於許多問題。一個簡單的例子就是「給出一組數字,其中全部元素除一個數字外均出現偶數次,找到奇數出現的數字」。只需對全部數字進行異或運算,就能夠有效地解決此問題。

 

輸出:出現奇數的元素是90

(3)不該使用按位運算符代替邏輯運算符。邏輯運算符(&&,||和!)的結果爲0或1,但按位運算符返回整數值。另外,邏輯運算符會將任何非零操做數都視爲1。例如,考慮如下程序,對於相同的操做數,&和&&的結果是不一樣的。

 

(4)左移和右移運算符分別等於乘和除以2。如第1點所述,它僅在數字爲正數時起做用。

 

輸出:x << 1 = 38x >> 1 = 9

(5)&運算符可用於快速檢查數字是否爲奇數或偶數。僅當x爲奇數時,表達式(x&1)的值才爲非零,不然值爲零。

 

(6)〜運算符應當心使用。若是結果的〜運算符存儲在一個無符號變量中,那麼它的結果多是一個大數。若是結果存儲在有符號變量中,則結果多是負數(假設負數以2的補碼形式存儲,其中最左邊的位是符號位)

但願對你們有幫助!

另外若是你想更好的提高你的編程能力,學好C語言C++編程!彎道超車,快人一步!筆者這裏或許能夠幫到你~

C語言C++編程學習交流圈子,QQ羣464501141點擊進入】微信公衆號:C語言編程學習基地

分享(源碼、項目實戰視頻、項目筆記,基礎入門教程)

歡迎轉行和學習編程的夥伴,利用更多的資料學習成長比本身琢磨更快哦!

編程學習書籍分享:

編程學習視頻分享:

在C中,如下6個運算符是按位運算符(在位級別工做)

C或C ++中的&(按位與)將兩個數字做爲操做數,並對兩個數字的每一位進行「與」運算。僅當兩個位均爲1時,AND的結果才爲1。

在C或C ++中(按位或)將兩個數字做爲操做數,並對兩個數字的每一位進行「或」運算。若是兩個位中的任何一位爲1,則OR的結果爲1。

C或C ++中的^(按位異或)將兩個數字用做操做數,並對兩個數字的每一位進行異或。若是兩個位不一樣,則異或的結果爲1。

在C或C ++中,<<(左移)採用兩個數字,左移第一個操做數的位,第二個操做數肯定要移位的位數。

C或C ++中的>>(右移)採用兩個數字,右移第一個操做數的位,第二個操做數肯定要移位的位數。

C或C ++中的〜(按位非)取一個數字並將其全部位求反

代碼舉例:

輸出:

a = 5,b = 9

a&b = 1

a | b = 13

a ^ b = 12

〜a = 250

b << 1 = 18

b >> 1 = 4

關於按位運算符的有趣事實

(1)左移位運算符和右移位運算符不該用於負數。若是任何一個操做數爲負數,則會致使未定義的行爲。例如,-1 << 1和1 << -1的結果均未定義。另外,若是數字移位的幅度大於整數的大小,則行爲是不肯定的。例如,若是整數使用32位存儲,則1 << 33是未定義的。

(2)從技術面試的角度來看,按位異或運算符是最有用的運算符。 它用於許多問題。一個簡單的例子就是「給出一組數字,其中全部元素除一個數字外均出現偶數次,找到奇數出現的數字」。只需對全部數字進行異或運算,就能夠有效地解決此問題。

輸出:出現奇數的元素是90

(3)不該使用按位運算符代替邏輯運算符。邏輯運算符(&&,||和!)的結果爲0或1,但按位運算符返回整數值。另外,邏輯運算符會將任何非零操做數都視爲1。例如,考慮如下程序,對於相同的操做數,&和&&的結果是不一樣的。

(4)左移和右移運算符分別等於乘和除以2。如第1點所述,它僅在數字爲正數時起做用。

輸出:x << 1 = 38x >> 1 = 9

(5)&運算符可用於快速檢查數字是否爲奇數或偶數。僅當x爲奇數時,表達式(x&1)的值才爲非零,不然值爲零。

(6)〜運算符應當心使用。若是結果的〜運算符存儲在一個無符號變量中,那麼它的結果多是一個大數。若是結果存儲在有符號變量中,則結果多是負數(假設負數以2的補碼形式存儲,其中最左邊的位是符號位)

但願對你們有幫助!

另外若是你想更好的提高你的編程能力,學好C語言C++編程!彎道超車,快人一步!筆者這裏或許能夠幫到你~

C語言C++編程學習交流圈子,【點擊進入】微信公衆號:C語言編程學習基地

分享(源碼、項目實戰視頻、項目筆記,基礎入門教程)

歡迎轉行和學習編程的夥伴,利用更多的資料學習成長比本身琢磨更快哦!

編程學習書籍分享:

編程學習視頻分享:

相關文章
相關標籤/搜索