亚洲最大看欧美片,亚洲图揄拍自拍另类图片,欧美精品v国产精品v呦,日本在线精品视频免费

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

    C語言中的無符號(hào)擴(kuò)展和帶符號(hào)擴(kuò)展

     

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

     

      擴(kuò)展的原則是:

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

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

     

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

      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類型,有符號(hào),128已經(jīng)溢出了,其二進(jìn)制是 1000 0000,第一位會(huì)被當(dāng)成符號(hào)位,也是就是說此時(shí)它是負(fù)數(shù)了,它擴(kuò)展成unsigned short時(shí),帶符號(hào)位擴(kuò)展,符號(hào)位為1,所以在前方補(bǔ)1,結(jié)果是1111 1111 1000 000. ucb類型為nsigned char,無符號(hào),二進(jìn)制是1000 0000,擴(kuò)展成unsigned shor,無符號(hào)擴(kuò)展,所以補(bǔ)0,結(jié)果是0000 0000 1000 0000,。相加結(jié)果為 1 0000 0000 0000 0000 由于unsigned short是二字節(jié),舍棄最前面的1,所以得到0x0,

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

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

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

     

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