位運算子作用於整數型別的運算物件,並把運算物件看成是二進位制位的集合。位運算子提供檢查和設定二進位制位的功能,一種名為bitset的標準庫型別也可以表示任意大小的二進位制位集合,所以位運算子同樣能用於bitset型別。
運算子功能用法~
位求反~ expr
<<
左移expr1 << expr2
>>
右移expr1 >> expr2&位與
expr & expr
^位異或
expr ^ exprl位或
expr l expr
一般來說,如果運算物件是「小整型」,則它的值會被自動提公升成較大的整數型別。運算物件可以是帶符號的,也可以是無符號的。如果運算物件是帶符號的且它的值為負,那麼位運算子如呵處理運算物件的「符號位」依賴於機器。而且,此時的左移操作可能會改變符號位的值,因此是一種未定義的行為。
關於符號位如何處理沒有明確的規定,所以強烈建議僅將位運算子用於處理無符號型別
移位運算子
標準io庫定義的《運算子和》運算子,這兩種運算子的內建含義是對其運算物件執行基於二進位制位的移動操作,首先令左側運算物件的內容按照右側運算物件的要求移動指定位數,然後將經過移動的(可能還進行了提公升)左側運算物件的拷貝作為求值結果。其中,右側的運算物件一定不能為負,而且值必須嚴格小於結果的位數,否則就會產生未定義的行為。二進位制位或者向左移(<<)或者向右移(>>),移出邊界之外的位就被捨棄掉了。
左移運算子(<<)在右側插入值為0的二進位制位。右移運算子(>>)的行為則依賴於其左側運算物件的型別:如果該運算物件是無符號型別,在左側插入值為0的二進位制位;如果該運算物件是帶符號型別,在左側插入符號位的副本或值為0的二進位制位,如何選擇要視具體環境而定。
位求反運算子
位求反運算子(~)將運算物件逐位求反後生成乙個新值。
char型別的運算物件首先提公升成int型別,提公升時運算物件原來的位保持不變,往高位新增0即可。因此在本例中,首先將bits提公升為int型別,增加24個高位0,隨後將提公升後的值逐位求反。
位與,位或,位異或運算子
對於位與運算子(&),如果兩個運算物件的對應位置都是1則運算結果中該位為1,否則為0。
對於位或運算子(|),如果兩個運算物件的對應位置至少有乙個為1則運算結果中該位為1 ,否則為0。
對於位異或運算子(^),如果兩個運算物件的對應位置有且只有乙個為1,則運算結果中該位為1,否則為0。
C 位運算子
c 源自c,在提供高階語言便利的同時,也繼承了c在硬體程式設計方面的功能。因此適用於編寫裝置驅動和嵌入式大 c c 提供位邏輯運算子和移位運算子。二者只能用於整形和字元型。位運算子是對每位進行操作而不影響左右兩位,這有別於常規運算子 是將整個數進行操作的。一 位邏輯運算子 1 按位取反 將1變為0,...
C 位運算子
最近工作專案壓力不大,便繼續開始自學c 發現基礎知識忘記的差不多了.上網搜尋了一些基礎的不能再基礎的東西,溫故知新.c 位運算子 http www.diybl.com course 3 program c cppjs 20090403 163995.html c c 提供位邏輯運算子和移位運算子。二...
C 位運算子
位運算子作用於位,並逐位執行操作。和 的真值表如下所示 pq p qp q p q000 0001 0111 1110 1001 1假設如果 a 60,且 b 13,現在以二進位制格式表示,它們如下所示 a 0011 1100 b 0000 1101 a b 0000 1100 a b 0011 1...