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


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

C或C ++中的&(按位與)將兩個數(shù)字作為操作數(shù),并對兩個數(shù)字的每一位進行“與”運算。僅當兩個位均為1時,AND的結(jié)果才為1。
該|?在C或C ++中(按位或)將兩個數(shù)字作為操作數(shù),并對兩個數(shù)字的每一位進行“或”運算。如果兩個位中的任何一位為1,則OR的結(jié)果為1。
C或C ++中的^(按位異或)將兩個數(shù)字用作操作數(shù),并對兩個數(shù)字的每一位進行異或。如果兩個位不同,則異或的結(jié)果為1。
在C或C ++中,<<(左移)采用兩個數(shù)字,左移第一個操作數(shù)的位,第二個操作數(shù)確定要移位的位數(shù)。
C或C ++中的>>(右移)采用兩個數(shù)字,右移第一個操作數(shù)的位,第二個操作數(shù)確定要移位的位數(shù)。
C或C ++中的?(按位非)取一個數(shù)字并將其所有位求反
代碼舉例:

輸出:
a = 5,b = 9
a&b = 1
a | b = 13
a ^ b = 12
?a = 250
b << 1 = 18
b >> 1 = 4
關(guān)于按位運算符的有趣事實
(1)左移位運算符和右移位運算符不應(yīng)用于負數(shù)。如果任何一個操作數(shù)為負數(shù),則會導(dǎo)致未定義的行為。例如,-1 << 1和1 << -1的結(jié)果均未定義。另外,如果數(shù)字移位的幅度大于整數(shù)的大小,則行為是不確定的。例如,如果整數(shù)使用32位存儲,則1 << 33是未定義的。
(2)從技術(shù)面試的角度來看,按位異或運算符是最有用的運算符。?它用于許多問題。一個簡單的例子就是“給出一組數(shù)字,其中所有元素除一個數(shù)字外均出現(xiàn)偶數(shù)次,找到奇數(shù)出現(xiàn)的數(shù)字”。只需對所有數(shù)字進行異或運算,就可以有效地解決此問題。

輸出:出現(xiàn)奇數(shù)的元素是90
(3)不應(yīng)使用按位運算符代替邏輯運算符。邏輯運算符(&&,||和?。┑慕Y(jié)果為0或1,但按位運算符返回整數(shù)值。另外,邏輯運算符會將任何非零操作數(shù)都視為1。例如,考慮以下程序,對于相同的操作數(shù),&和&&的結(jié)果是不同的。

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

輸出:x << 1 = 38x >> 1 = 9
(5)&運算符可用于快速檢查數(shù)字是否為奇數(shù)或偶數(shù)。僅當x為奇數(shù)時,表達式(x&1)的值才為非零,否則值為零。

(6)?運算符應(yīng)小心使用。如果結(jié)果的?運算符存儲在一個無符號變量中,那么它的結(jié)果可能是一個大數(shù)。如果結(jié)果存儲在有符號變量中,則結(jié)果可能是負數(shù)(假設(shè)負數(shù)以2的補碼形式存儲,其中最左邊的位是符號位)
希望對大家有幫助!
另外如果你想更好的提升你的編程能力,學(xué)好C語言C++編程!彎道超車,快人一步!筆者這里或許可以幫到你~

UP在主頁上傳了一些學(xué)習(xí)C/C++編程的視頻教程,有興趣或者正在學(xué)習(xí)的小伙伴一定要去看一看哦!會對你有幫助的~
分享(源碼、項目實戰(zhàn)視頻、項目筆記,基礎(chǔ)入門教程)
歡迎轉(zhuǎn)行和學(xué)習(xí)編程的伙伴,利用更多的資料學(xué)習(xí)成長比自己琢磨更快哦!
編程學(xué)習(xí)書籍分享:

編程學(xué)習(xí)視頻分享:
