C++primer 5.3 位操作符(~、^、&、|)(未完)

簡介

  • 使用unsigned 整型操作數

    • 無符號的好處就是所有的位都是數字位,沒有符號位。 unsigned char bits = 0227 ,0227表示的是八進制的數,二進制的三位對應八進制的一位
  • 在使用位操作符之前都先將整型數轉換爲二進制數

    • 類似於bitset 標準庫類型(3.5節),轉換成裏面的數值只有0和1 ,0227要表式成二進制數

==================================================================================

一、位操作符

1、位操作符介紹

  • 位操作符使用整型的操作數。

  • 位操作符將其整型操作數視爲二進制位的集合,爲每一位提供檢驗和設置的功能(3.5 節 bitset 類型的對象也可以使用類操作符)

  • 到底有哪些位操作符呢?

    • ~ : 位求反 :功能類似於bitset 的flip 操作:將操作數的每一個二進制位取反:1變0,0變1
    • << : 左移 : 操作符提供移位操作,其右操作數標誌要移動的位數。
    • >> : 右移
    • & : 位與 : 如果兩個操作數對應的位都爲1 ,結果爲 1 ,否則爲0。
    • ^ : 位異或 : 在每個位的位置,如果兩個操作數對應的位只有一個(不是兩個)1,結果 該位爲1,否則爲0;
    • | : 位或 : 在每個位的位置,操作數只要有1 ,結果就爲1 ,否則爲0 .
  • 系統不能確保如何處理其操作數的符號位,所以建議使用unsigned 整型操作數
// - 例子,假設unsigned char 類型有8位。
int mian(){
unsigned char bits= 0227;
bits = ~ bits;
return 0;}

這裏寫圖片描述

//所以,0227 表示爲 010010111,這樣一來取反就很好算了。101101000  變成八進制就是 0550
unsigned char b1 = 0145;
unsigned char b2 = 0257;
unsigned char result=b1 & b2;

這裏寫圖片描述

2、bitset 對象或整型值的使用

//使用bitset 標準庫來存放一次測驗的成績,成績分及格和不及格,用1和0表示
bitset<30> bitset_quiz1;//使用3.5 節 bitset 標準庫類型,默認爲0,就是都不及格
bitset_quiz1.set(27); //修改27 號學生的位,set函數功能是置爲1,將27位置爲1

//使用整型值上的低級位操作來存放一次測驗的成績,成績分及格和不及格,用1和0表示
unsigned long int_quiz1=0;//使用unsigned long 類型數來實現,初始值爲0,unsigned long 類型的數據在機器上都至少擁有32位的長度。
int_quiz1 |= 。。。。。。。

//略。。
//bitset 標準庫類型比 整型值上的低級位操作簡單、方便

3、將移位操作符用於IO

例子

//《程序員面試寶典 p39》
int main()
{

int f(int x,int y)
{
return (x&y)+((x^y)>>1)
}
return 0;}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章