欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

C語言對常數做強制類型轉換,有意義嗎?無論如何轉換,不還是那個數嗎?

錢艷冰2年前21瀏覽0評論

謝邀。

在C語言程序中,對常數做強制類型轉換當然不是沒有意義的,例如(int)3.14將只保留整數部分。即使是從整型轉換為整型也是有意義的,強制類型轉換可以限定常數的寬度。

例如下面這行C語言賦值語句:

intres=(unsignedchar)0xffff;

該語句執行完成后,res中的數值將為0xff,而不是0xffff。當然了,在實際的C語言程序開發中,也可以將ret聲明為unsignedchar型,這樣就可以省去對常數0xffff的強制類型轉換了。

如果題主覺得上面這個例子沒有實際應用價值,再來看下面這段C語言代碼:

編譯并執行這段C語言代碼,會輸出什么呢?請看:

居然不是14600000000!事實上,這段簡短的C語言代碼常常會讓初學者百思不得其解,甚至會懷疑C語言或者計算機有問題,出故障了。

其實原因很簡單,就是數據溢出了而已。以我的機器為例,在C語言程序的計算過程中,所有乘數默認都是int型的,上述C語言代碼中的兩個常數的乘法運算結果顯然超出了int型能夠表示的最大數據,當然會出錯了。

這其實是一個隱藏的較深的錯誤,稍微有些經驗的C語言程序員能夠避開變量的數據溢出,因為C語言中的變量總是需要使用數據類型定義的,而某種數據類型能夠表達的數據范圍,程序員心里一般都有一把標尺。但是常數導致的數據溢出,很多程序員就容易忽略了。

要改正上述C語言代碼的錯誤其實很簡單,只需將任意一個乘數轉換為寬度更寬的數據類型就可以了,相關C語言代碼如下,請看:

編譯并執行這段C語言代碼,發現輸出與預期一致了。

可見,題目中的“強制類型轉換后,還是那個數”的說法是不準確的,在C語言程序中,即使是對常數強制類型轉換,也是有意義的。

歡迎在評論區一起討論,質疑。文章都是手打原創,每天最淺顯的介紹C語言、linux等嵌入式開發,喜歡我的文章就關注一波吧,可以看到最新更新和之前的文章哦。