k&r c 採用無符號保留(unsigned preserving)原則,就是當乙個無符號型別與int或更小的整型混合使用時,結果型別是無符號型別。
這是個簡單的規則,與硬體無關。但是,真如下面的例子所展示的那樣,它有時會使乙個負數丟失符號位。
ansi c 採用值保留()原則,就是當把幾個整型運算元像下面那樣混合使用時,結果型別有可能是有符號數,也可能是無符號數,取決於運算元的型別的相對大小。
1在vc6.0中的執行結果:void
main()2
10else
1114 }
對無符號型別的建議:
盡量不要在你的**中使用無符號型別,以免增加不必要的複雜性。尤其是,不要僅僅因為無符號數不存在負值(如年齡、身高)而用它來表示數量。
只用在使用位段和二進位制掩碼時,才可以用無符號數。應該在表示式中使用強制型別轉換,使運算元均為有符號數或者無符號數,
這樣就不必有編譯器來選擇結果的型別。
注:the c programming language的作者簡稱k&r,也是c語言之父, 經常用k&r c來和ansi c做對比。
這本書的第二版已經用ansi。我用的編譯器是vc6.0, 看來微軟向來無視標準。
附:在 ansi c或者c++中,在可執行**中隨時定義變數是允許的,但是在k&r c中是不允許的,微軟實現的c竟然是k&r c。
這樣的錯誤也體現在vc中要是用for(int i = 0; i++; i<10)同時你的檔名是.c的也會出現這樣的錯誤。
K R C vs ANSI C(資料型別提公升)
前面我們提到,當操作符的運算元型別不一致時,會發生型別轉換,它負責把兩個不同的運算元型別轉換成 同一種普通操作型別,轉換後的型別,一般也就是結果型別。拋磚 printf d sizeof a 這行 列印出儲存乙個字元字面值型別的長度。你敢確定它的結果是 1 嗎?執行一下試試。你會發現它的 結果是 4...
python常用的資料型別以及資料型別轉換
在python2中,整數的大小是有限制的,即當數字超過一定的範圍不再是int型別,而是long長整型,而在python3中,無論整數的大小長度為多少,統稱為整型int。int 將字串資料型別轉為int型別,注 字串內的內容必須是數字 浮點型,小數型 關於字串是python中最常用的資料型別,其用途也...
C stringstream 簡化資料型別轉換
c 標準庫中的提供了比ansi c的更高階的一些功能,即單純性 型別安全和可擴充套件性。在c 中經常會使用到snprintf來格式化一些輸出。為了正確地完成這個任務,必須確保證目標緩衝區有足夠大空間以容納轉換完的字串。此外,還必須使用正確的格式化符。如果使用了不正確的格式化符,會導致非預知的後果。1...