無符號數的算術運算的溢位問題
阿新 • • 發佈:2018-11-02
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型別的數字。