ACM競賽中用到的二進位制處理方法(完善中)

Emma1997發表於2016-12-07

二進位制邏輯運算:
1、邏輯“或”運算:‘|’(以下為程式設計時的符號)
只要兩個值裡面有一個是1也就是真,那麼結果就是1,為真。
2、邏輯“與”運算:‘&’
只有兩個值都是1,也就是都是真的時候,結果才是1,為真。
3、邏輯“非”運算 :‘!’
!1 = 0; !0 = 1;
非真就是假,非假就是真。
4、邏輯“異或”運算 :‘^’(題中一般會寫為xor)
如果兩個值相同,異或為0,不同,異或為1。

具體操作例子:
1、把輸入壓入狀態量
如果c為‘+’,則把1壓入state的某一位中
範例:
字串:+-++—
state:1011000

    int state = 0;
    for (int i = 0; i < 16; i++) {
        char c;
        cin >> c;
        state <<=  1;
        if (c == '+') {
            state |= 1;
        }
    }

2、把二進位制中的一位取反
把c的第x位取反。x從右往左算從0開始。

c = a ^(1 << x);

3、判斷二進位制串中有多少個1

int get_num(int a)
{
    int ret = 0;
    while (a) {
        a &= (a - 1);
        ++ret;
    }
    return ret;
}

4、判斷兩個二進位制串是否在相同位置有1

bool fit(int a, int b)
{
    if (!(a & b) )return true;
    else return false;
}

相關文章