移位操作符分為左移操作符和右移操作符
(1)左移操作符
左移操作符只有一種移位規則:左邊拋棄、右邊補0.
(2)右移操作符
右移操作符分為邏輯右移和算術右移。
邏輯右移:右邊丟棄,左邊補0。
算術右移:右邊丟棄,左邊用原值的符號位填充。
這就是左移操作符和右移操作符的區別。
在移位操作符中,最重要的一點是:不要移動負數字,這個是c語言標準中沒有定義過的。
那麼移位操作符有什麼用呢?
移位操作符更多的是用在二進位制的場景裡,比如計算二進位制中1的位數等等。
位操作符的用處不需要展開去說,這裡主要講一道面試題,來說明位操作符的用處。
面試題:不能建立臨時變數,實現兩個數的交換。
我們最常用的就是建立乙個變數作為交換兩個數的中介,但是如果不能建立臨時變數,我們應該如何去做。
最容易想到的就是相加再相減
int
main()
這種方法可以解決問題,但是如果這兩個數很大,超過了整形所能表達的範圍,就會產生溢位,不夠優化。
這個時候位操作符就可以優化溢位的問題
int
main()
通過異或操作符來實現兩個數的交換,並且不用考慮溢位的問題,很好的解決了這道題。但是這種方法比較難以想到,在平時還是要打好基礎。
邏輯操作符:&&邏輯與 ||邏輯或
這兩個操作符在if語句中用的比較多,多個條件的判斷就需要用到邏輯操作符。
但是邏輯操作符有乙個特點,以下面的一道360的面試題為例介紹一下:
int
main()
i = a++ && ++b && d++之後a、b、c、d和i的值是多少呢?
是1、3、3、5、0還是1、2、3、4、0呢?
答案是1、2、3、4、0,這是因為a++是先使用再加加,a++之後a還是0,邏輯與左邊運算元只要有乙個0之後就不會再執行後面的語句,因為左邊為0,不管後面是什麼結果都是0;邏輯或也是如此,左邊運算元只要有乙個1,後面的語句都不會執行。
c語言操作符 位操作符 移位操作符
1 按位操作符 1.1 按位 與 雙目運算子 僅當兩個運算元都為1時,結果為1,否則為0。參與運算的數以補碼方式出現。例 9 5 1 0000 1001 9的補碼 0000 0101 5的補碼 0000 0001 1的補碼 應用 a 通常將某些位清零或保留某些位。例如 將a的高八位清零,保留低八位,...
C語言 , 操作符
例如 define to string s s 將會使編譯器把以下命令 cout to string hello world endl 理解為cout hello world endl 例如 define concatenate x,y x y int xy 10 將會使編譯器把 cout conc...
C語言操作符
操作符的分類 1 算術操作符 2 移位操作符 3 位操作符 4 賦值操作符 5 單目操作符 6 關係操作符 7 邏輯操作符 8 條件操作符 9 逗號表示式 1 算術操作符 1 除了 操作符之外,不能用於浮點數。2 對於 操作符如果兩個運算元都為整數,執行整數除法。而只要有浮點數執行的就是浮點數除法。...