左移(右移)運算符結(jié)合swichcase語句詳解

字號:

初學者們都知道在最常見的輸入輸出函數(shù)中cout和cin后總是跟一個>>和<<??墒浅鯇W者未必知道這兩個符號還是兩種運算符,Examda就來結(jié)合實例代碼來講講它的用法。
    定義:
    左移運算符 (<<) 將第一個操作數(shù)向左移動第二個操作數(shù)指定的位數(shù)。第二個操作數(shù)的類型必須是 int。
    右移運算符 (>>) 將第一個操作數(shù)向右移動第二個操作數(shù)所指定的位數(shù)。
    #include
    using namespace std;
    int main(void)
    {
    int a;
    cout <<"please input a number:\n";
    cin >>a;
    int c1 = a%3 ==0;//%整除符號,結(jié)果為余數(shù),比如%3,結(jié)果是。
    int c2 = a%5 ==0;//==判斷式子左邊的值是否和右邊的值相等,相等結(jié)果為true,反之,為flase
    int c3 = a%7 ==0;
    switch((c1<<2)+(c2<<1)+c3){
    case 0: cout <<"不能被,5,7整除.\n"; break;
    case 1: cout <<"只能被整除.\n"; break;
    case 2: cout <<"只能被整除.\n"; break;
    case 3: cout <<"可以被,7整除.\n"; break;
    case 4: cout <<"只能被3整除.\n"; break;
    case 5: cout <<"可以被,7整除.\n"; break;
    case 6: cout <<"可以被,5整除.\n"; break;
    case 7: cout <<"可以被,5,7整除.\n"; break;
    }
    }
    考試大提示: 看上面一段代碼,我們假設(shè)輸入a的值為9,下面考試大提示: 分步驟分析它的過程。
    1. int c1 = a%3 ==0;
    int c2 = a%5 ==0;
    int c3 = a%7 ==0;
    執(zhí)行這三句,結(jié)果分別為c1=1,c2=0,c3=0。
    2. (c1<<2)+(c2<<1)+c3
    最核心的部分了,由上面我們可以知道c1=1。所以c1<<2的意思就是將c1的二進制值左移兩位,1的二進制是1,左移兩位是100,轉(zhuǎn)換為10進制為4;由于c2,c3都為0,所以移位后也為0。所以這個表達式最后的值為4.
    3. 4即為輸出“只能被3整除?!迸c事實相符,分析完畢。
    想一想:為什么7種不同的結(jié)果對應7個不同的數(shù)字?