1. 程式人生 > >無符號數的算術運算的溢位問題

無符號數的算術運算的溢位問題

1.unsigned char 

    unsigned char a = 'A';
    unsigned char b = 'H';
    unsigned char c;
    c = a - b;

    cout << a - b << endl;
    cout << sizeof(a - b) << endl;
    cout << typeid(a - b).name() << endl;
    cout << bitset<sizeof(a - b) * 8
>(a - b) << endl; cout << c << endl; cout << sizeof(c) << endl; cout << typeid(c).name() << endl; cout << bitset<sizeof(c) * 8>(c) << endl;

直接輸出a-b的情況下,無論a與b的大小,都會轉成int型別資料,原因還不知道,知道後再修改

兩段程式碼在輸出a-b和c,前者輸出-7後者不輸出原因在於:a-b是int型別所以直接輸出-7,而c是unsigned char 型別,輸出c是需要檢視assic程式碼值0B11111001(c雖然沒有輸出,但是計算仍然進行了),而我們知道ascii是無符號數,也就是0開頭的二進位制數,不可能出現1開頭的二進位制數(補碼為負數),所有根本沒有這個符號,所以什麼也沒有輸出。當大小轉換,不是小減大時,輸出c,會輸出相應的assic字元,但a-b仍是int型別的數字。