C語言中的正負數及其輸出以及小數


1、符號也是數字的一部分,也要在內存中體現出來。符號只是正負兩種情況,用一位(Bit)就足以表示;C語言中規定,把內存的最高位作為符號位

 

2、C語言中規定,在符號位中,用0表示正數、用1表示負數

 

3、C語言允許我們這樣做,如果不希望設置符號位,可以在數據類型前面加上unsigned關鍵字,

例如:unsigned int b=1002;或 unsigned b=1002;

  這樣,short、int、long中就沒有符號位了,所有的位都用來表示數值,正數的取值范圍更大了,這也意味着,使用了unsigned后只能表示正數,不能在表示負數了!加了unsigned的數字稱為無符號數未加的數字稱為有符號數

  printf不支持以八進制(%0)和十六進制(%x)形式輸出有符號數,只有十進制用%d來表示有符號數。用%u來表示無符號數。

4、工作原則:

  1)當以有符號數的形式輸出時,printf會讀取數字所占的內存,並把最高位作為符號位,把剩下的內存作為數值位。

  2)當以無符號數的形式輸出時,printf也會讀取數字所占的內存,並把所有內存都作為數值位對待。

對於一個有符號的正數,它的符號位是0;當按照無符號數的形式讀取時,符號位就變成了數值位,但該位恰巧是0而不是1;所以對數值不會產生影響,這就好比在一個數字前面加0,有多少個0都不會影響數字的值。

可以說,“有符號的正數的最高位是0”這個巧合才使得%0和%x輸出有符號數時才不會出錯!

5、注意:雖然部分編譯器支持二進制數字的表示,但是卻不能使用printf函數輸出二進制,這一點比較遺憾!

  若要使輸出的八進制或十六進制的前綴也輸出,則要在%前加上 # 號。例如:%#0、%#x

6、小數的輸出:

  %e以指數形式輸出float類型,輸出結果中的e小寫。

  %le以指數形式輸出double類型,輸出結果中的e小寫。

 1)%g默認最多保留六位有效數字,包括整數部分和小數部分;%f和%e默認保留六位小數,只包括小數部分。

2)%g不會再最后強加0來湊夠有效數字的位數,而%f和%e會在最后強加0來湊足小數部分的位數

 

7、數字的默認類型:對於整數,默認為int類型;對於小數,默認是double類型。

  1)在整數后面緊跟l或者L(不區分大小寫)表明該數字是long類型

  2)在小數后面緊跟f或F表明數字是float類型

 

8、小數和整數之間的相互賦值:

  1)將整數賦值給小數類型,在小數后面加0就可以了,加幾個都無所謂哦!

  2)將小數賦值給整數類型,就得把小數部分丟掉,只能取整數部分,這會改變數字本身的值。直接丟掉小數部分,不是進行四舍五入

 由於將小數賦值給整數類型會“失真”,所以編譯器一般會給出警告,讓大家引起注意。 

 


免責聲明!

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



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