久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      C語言中的無符號擴展和帶符號擴展

       

        C語言中,當不同類型的數(shù)據(jù)進行運算的時候,就會發(fā)生強制或隱式類型轉(zhuǎn)換,通常是低精度的數(shù)據(jù)類型擴展到高精度的。有些時候,低精度的位數(shù)比較少,擴展到高精度的時候,就要在前面補充一些位。那么這些位是補0還是補1呢?這就涉及到無符號擴展和帶符號擴展。

       

        擴展的原則是:

             1.有符號的數(shù)據(jù)類型,在向高精度擴展時,總是帶符號擴展

        2.無符號的數(shù)據(jù)類型,在向高精度擴展時,總是無符號擴展

       

        怎么理解呢?首先來看一道題目,按此題目講解完你就明白了!

        char ca=128;

        unsigned char ucb=128;

        unsigned short usc=0;

        1)usc=ca + ucb;

        printf(“%x”,usc);

        2)usc=ca +(unsigned short)ucb;

        printf(“%x”,usc);

        3)usc=(unsignedchar)ca + ucb;

        printf(“%x”,usc);

        4)usc=ca+(char)ucb;

        printf(“%x”,usc);

       

        問,在1、2、3、4這4種情況下分別輸出什么?

       

        分析:

        1)對于char類型,有符號,128已經(jīng)溢出了,其二進制是 1000 0000,第一位會被當成符號位,也是就是說此時它是負數(shù)了,它擴展成unsigned short時,帶符號位擴展,符號位為1,所以在前方補1,結果是1111 1111 1000 000. ucb類型為nsigned char,無符號,二進制是1000 0000,擴展成unsigned shor,無符號擴展,所以補0,結果是0000 0000 1000 0000,。相加結果為 1 0000 0000 0000 0000 由于unsigned short是二字節(jié),舍棄最前面的1,所以得到0x0,

        2)情況和1一樣,只是將ucb顯示強制轉(zhuǎn)換為unsigned short,所以得到0x0,

        3)ca先強制轉(zhuǎn)換為unsignedchar,仍然是1000 0000,注意此時轉(zhuǎn)換后已經(jīng)是一個無符號數(shù),所以再往unsigned short 擴展時,為無符號擴展,結果為0000 0000 1000 0000,ucb擴展后也是0000 0000 1000 0000,相加結果為 0000 0001 0000 0000,所以結果為0x100

        4)ca轉(zhuǎn)為unsigned short,帶符號擴展,為1111 1111 1000 000,ucb先強制轉(zhuǎn)換為char,然后再轉(zhuǎn)為unsigned short,此時也要帶符號擴展,所以也是1111 1111 1000 000,兩數(shù)相加,得到 1 1111 1111 0000 0000 ,所以結果為0xff00。

       

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號