久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放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. 站長資訊網
      最全最豐富的資訊網站

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

       

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

       

        擴展的原則是:

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

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

       

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

        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已經溢出了,其二進制是 1000 0000,第一位會被當成符號位,也是就是說此時它是負數了,它擴展成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顯示強制轉換為unsigned short,所以得到0x0,

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

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

       

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