位運算簡易講解

位運算&(和,一一爲一,其餘爲0)
a=4;
b=5;
a=(0000 0100)2;
b=(0000 0101)2;

void and(int a, int b) {
    printf("%d\n", a&b);//一一爲一,其餘爲0
    return;
}//a&b=(0000 0100)2;

位運算|(或者,有一爲一,無一爲0)

void either(int a, int b) {
    printf("%d\n", a | b);//有一爲一,無一爲0
    return;
}//a|b=(0000 0101)2;

位運算^(異或,相同爲0,不同爲1)

void other(int a, int b) {
    printf("%d\n", a^b);//相同爲0,不同爲1
    return;
}//a^b=(0000 0001)2;

位運算~(取反)

void against(int a) {
    printf("%d\n", ~a);//取反
    return;
}//~a(1111 1011)2,根據反碼,補碼可得爲-5;

位運算>>(右移:低位去n,高位補0或1)

void rightmove(int a) {
    printf("%d\n", a >>2 );//右移,去掉低二位,高位補0或1
    return;
}//a>>2=(0000 0001)2;

位運算 <<(左移:高位去n,低位補0)

void leftmove(int a) {
    printf("%d\n", a << 2);//左移,去掉高二位,低位補0;
    return;
}//a<<2=(0001 0000)2;

下面是用來測試的主函數,大家可以用來測試

void main() {
    int a, b;
    int n;
    scanf("%d", &n);
    printf("please input two int\n");
    scanf("%d%d", &a, &b);
    switch (n) {
    case 1: and (a, b); break;
    case 2: either(a, b); break;
    case 3: other(a, b); break;
    case 4: against(a); break;
    case 5: rightmove(a); break;
    case 6: leftmove(a); break;
    default:break;
    }
    return;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章