C語言----數據類型與表達式(進階篇十六)


    。。。

  無符號整數的范圍

    unsigned short的取值范圍為0~65535。

    unsigned short占有2個字節,也就是16位,在計算機內部用(0000 0000 0000 0000)2表示0,用(1111 1111 1111 1111)2表示最大數。

    (1)2表示1,(11)2表示3,(111)2表示7……(1111 1111 1111 1111)2表示65535,剛好是21-1、22-1、23-1……216-1,得出無符號整型的計算公式為0~2n-1(n為整型位數)。

 

  補碼

    補碼中第一位表示正負數:0表示正數,1表示負數。  

    補碼原理

 

    要求一個負數的補碼,將它的絕對值二進制按位取反再加1,正數的補碼是自己

    如求4位二進制數-3的補碼:把(3)10=(0011)2按位取反得(1100)2,再加1得(1101)2,short型只是把4位擴展為16位(0000 0000 0000 0011)2,按位取反得(1111 1111 1111 1100)2,加1得(1111 1111 1111 1101)2

    16位二進制數-32768的補碼:將32768轉成二進制得(1000 0000 0000 0000)2,取反得(0111 1111 1111 1111)2,加1得 (1000 0000 0000 0000)2

    補碼的特點是可以把減法運算轉換成加法,比如一個4位二進制減法(0011)2-(0001)2在CPU中會先取得(0001)2的補碼(1111)2,將此變成加法運算 (0011)2+(1111)2得到(10010)2,因為運算器只有4個位,前面的1舍去,得到正確結果(0010)2,這樣CPU中就可以省去一個做減法運算的元件。

  

  不同類型的混合運算

    ※賦值語句中,等號兩邊類型不同時,以左邊類型為准。

    如:

      int a=300;

      char b;

      b=a; /*不可預期的錯誤,但系統不會報錯*/

    ※除法運算時,2/3的結果為0,2.0/3或者2/3.0結果都為0.66666……。這說明如果除號兩邊都是整數,結果只能是整數,除號兩邊有任意一個浮點數,結果就是精確的浮點數。

      混合運算時也遵循上述規律:

        double d=1.0+2/3;

      會先算2/3,這時答案已經是0,再加1.0,得到錯誤的結果1.0,改成

        double d=1.0+2/3.0;

      結果為1.666666,正確。

    ※char參與任何運算都會轉換成ASCII碼

    ※%(取余)不能用在浮點數上,它不會自動將浮點數轉換成整數。

 

  強制轉換

    格式:

      (類型名)表達式

    如:

      double d=(double)2/3+1.0;

      相當於double d=2.0/3+1.0;

      與double d=2/3.0+1.0;運算結果相同

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM