C++中無符號數(shù)與有符號數(shù)的轉(zhuǎn)換

技術(shù)交流QQ群:1027579432,歡迎你的加入!

C++中的無符號數(shù)與有符號數(shù)的轉(zhuǎn)換

  • 1.無符號數(shù)轉(zhuǎn)為有符號數(shù)
        unsigned short int a = 50000;
        signed short int b = 0;
        b = a;
        cout << "無符號數(shù)轉(zhuǎn)為有符號數(shù): " << b << endl;
    
  • 解釋:因為short int 在32位機器上占2個字節(jié),即16位。故無符號數(shù)unsigned short int表示范圍是0到65535。而有符號數(shù)signed int可表示的范圍是-32768-32767。無符號數(shù)轉(zhuǎn)為有符號數(shù)的轉(zhuǎn)換方法是:假設(shè)無符號數(shù)是N,無符號數(shù)的數(shù)據(jù)基本類型所占的位數(shù)是B位,則有符號數(shù)的表示是:N - 2^B
  • 2.有符號數(shù)轉(zhuǎn)為無符號數(shù)
        unsigned int u = 10;
        int i = -42;
        cout << "有符號數(shù)轉(zhuǎn)為無符號數(shù):" << u+i << endl;
    
  • 解釋:當有符號數(shù)和無符號數(shù)相加時,首先將有符號數(shù)變?yōu)闊o符號數(shù),然后執(zhí)行加法操作。有符號數(shù)轉(zhuǎn)為無符號數(shù)的方法:有符號數(shù)+無符號數(shù)的模。例如上例中,int i = -42;i是一個有符號數(shù),unsigned int u是一個無符號數(shù),u在32位機器上占4個字節(jié),即32位,故無符號數(shù)u的模是2^32。所以,最后的結(jié)果是u+i =-42+2^32+10
  • 3.兩個無符號數(shù)之間的運算
            unsigned int u1 = 42, u2 = 10;
            cout << "u1 - u2 = " << u1 - u2 << endl;  // 正常運算
            cout << "u2 - u1 = " << u2 - u1 << endl;  // u1-u2 = -32,因為無符號數(shù)不會小于0,然所以將使用上面2中的方法,故最后的結(jié)果是-32+2^32
    
  • 4.無符號數(shù)用于循環(huán)
            // for(unsigned int i = 10; i >=0;i--)  陷入死循環(huán)!!!原因是當執(zhí)行到最后一次循環(huán)時,輸出i = 0,i--后i變成-1,根據(jù)上面3的分析,所以被自動轉(zhuǎn)成無符號數(shù)2^32-1,再繼續(xù)進行循環(huán)
                // cout << "i = " << i << endl;
            unsigned int u3 = 11;
            while(u3 > 0){  // 改用fwhile循環(huán)將不會陷入死循環(huán)
                --u3;
                cout << "u3 = " << u3 << endl;
        }
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容