回覆列表
-
1 # 陳小萌128562099
-
2 # EXCEL進階課堂
你的問題是:在C語言中為什麼要把int分為有符號和無符號?
你想了解的是這樣設定的原因。
在C語言當中,把int型分為有符號和無符號原因:是為了更加有效和合理的利用記憶體空間,避免空間的浪費。
眾所周知,資料型別產生的變數都會分配記憶體空間,而記憶體空間對於我們來說是寶貴的。
注意:上圖是在DEV-C裡面的除錯結果。
怎樣才能合理、有效的使用記憶體空間,這是程式設計師必須思考的問題。
如:如果定義一個變數,它是來儲存一個人的年齡的。
那麼年齡的值有沒有可能為負呢?
當然不可能為負。只能是從0開始,然後是正數。(人的壽命是有限的,這是一個常識,舉這個例子僅僅是為了說明後面的內容,大家不要去糾結年齡的最大值了。)
如果我們把這個變數定義為有符號的int型,這樣分配出來的位元組,有一半是用來裝負數的。對於根本就不會出現負數的資料,卻非要準備空間來儲存負數,這對於空間就是一種嚴重的浪費。
如果我們把這個變數定義為無符號的int型,空間就全部用來裝0和正數,這樣的浪費就可以被避免掉。
這樣的例子在生活當中到處可以,只要是涉及到只能取0和正數的,都可以使用無符號型來思考。unsigned int/unsigned short/unsigned long 。
程式設計是一門應用學科,學習的過程中最好能結合工作和生活實際來思考。
程式設計是為了解決生活當中的實際問題,於是一門成熟的設計語言,必定會根據實際的問題情況來做自身構建,C語言就是這樣的一門語言。建議題主以後再學習的過程中,
最好能結合工作和生活實際來思考。
其實這個問題在《C語言程式設計魔法書》中講得很清楚明白了!無符號數對於很多數值計算非常有用!比如,在數字影象處理中,一個畫素的某個分量的值就是0到255,如果你透過網路獲得關於某一影象的畫素值,每個畫素的每一分量都是一個位元組,倘若不用無符號數,而是帶符號數,那麼255就會被表示為-1,這顯然不是我們想要的!
所以像Java這種不引入無符號整數的垃圾程式語言才是不可理喻的!